📅  最后修改于: 2023-12-03 14:39:03.018000             🧑  作者: Mango
AdonisJS 是一个基于 Node.js 平台的优雅、简洁的 MVC 框架。AdonisJS2.0 是 TypeScript 编写的,且内置了很多领先的工具,包括 ORM、路由、中间件、验证、缓存、Websocket、全局异常处理等等。
其中路由非常重要,本文将会介绍 AdonisJS2.0 的路由组功能。
路由组是一种目录结构和代码模块化的思想的一种实现,它可以让程序员更好的组织路由,并且可以重用路由规则。
在路由组中,可以嵌套多个 HTTP 路由,并设置中间件、域名、前缀等属性。路由组中的子路由可以继承父路由的属性,也可以重写它们。
以下是使用路由组的示例:
// File: start/routes.ts
// 导入 Route
import Route from '@ioc:Adonis/Core/Route'
// 定义路由组
Route.group(() => {
// 给后缀为 .js 的文件响应 JavaScript MIME 类型
Route.get('*.js', async ({ response }) => {
response.type('application/javascript')
})
// 定义子路由
Route.get('home', 'HomeController.index')
}).middleware(['auth'])
代码解释:
首先,使用 import 引入 Route。
然后,使用 Route.group 定义路由组。
group 的回调函数中可以定义多个路由和中间件。
定义子路由,即 /home 路径。
middleware 属性可以设置组内共享的中间件。
路由组的作用:
使用 prefix 属性可以为路由组内的所有路径增加统一前缀。
Route.group(() => {
Route.get('home', 'HomeController.index')
}).prefix('admin')
此时,访问 /admin/home 会调用 HomeController.index 方法。
如果路由组的路径需要被同一个中间件链包裹,可以使用 middleware 属性。
Route.group(() => {
Route.get('home', 'HomeController.index')
}).middleware('auth')
其中参数可以是一个或多个中间件名,如需要额外的中间件操作,可以采取以下方式:
Route.group(() => {
Route.get('home/:id', async ({ params, response }) => {
response.send(params.id)
})
})
.middleware((ctx, next) => {
// 中间件操作,如认证
await next()
}, 'auth')
可以为路由组指定域名,这样只有来自该域名的请求才能匹配路由组。
Route.group(() => {
Route.get('home', 'HomeController.index')
}).domain('blog.my.com')
如果在访问该路由组时未使用指定域名,则会返回 404 错误。
本文介绍了 Adonis 路由组的基本使用和属性设置,路由组是极好的代码架构优化方式,在实际项目开发中,我们应该将其用好,以实现更好的维护效果。