📜  adonis 路由组 - TypeScript (1)

📅  最后修改于: 2023-12-03 14:39:03.018000             🧑  作者: Mango

Adonis 路由组 - TypeScript

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'])

代码解释:

  1. 首先,使用 import 引入 Route。

  2. 然后,使用 Route.group 定义路由组。

  3. group 的回调函数中可以定义多个路由和中间件。

  4. 定义子路由,即 /home 路径。

  5. 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 路由组的基本使用和属性设置,路由组是极好的代码架构优化方式,在实际项目开发中,我们应该将其用好,以实现更好的维护效果。