路由 Routing

Nitro 支持文件系统路由以及定义路由规则以获得最大的灵活性和性能。

基于文件的路由

Nitro 支持 API 路由的基于文件的路由。

api/routes/ 目录中的处理程序文件将自动映射到 unjs/h3 路由。

由于像 Vercel 这样的提供商使用顶级 api/ 目录作为一项功能,Nitro 也支持 routes/api/ 来创建 API 路由。

md
api/
  test.ts      <-- /api/test
routes/
  hello.ts     <-- /hello
nitro.config.ts

如果您使用的是 Nuxt,请将 api/routes/ 移到 server/ 目录中。

Simple route

ts
// api/hello.ts
export default eventHandler(() => {
  return { hello: 'world' }
})

您现在可以使用 await $fetch('/api/hello') 普遍调用此 API。

Route with params

js
// routes/hello/[name].ts
export default eventHandler(event => `Hello ${event.context.params.name}!`)
md
/hello/nitro
md
Hello nitro!

要包含 /,请使用 [...name].ts

js
// routes/hello/[...name].ts
export default eventHandler(event => `Hello ${event.context.params.name}!`)
md
/hello/nitro/is/hot
md
Hello nitro/is/hot!

Specific request method

具有特定 HTTP 请求方法(get、post、put、delete、options 等)的 API 路由。

js
GET
js
// routes/users/[id].get.ts
export default eventHandler(async (event) => {
  const { id } = event.context.params
  // TODO: fetch user by id
  return `User profile!`
})

查看 h3 JSDocs,了解所有可用的实用程序,例如 readBody。

Catch all route

js
// routes/[...].ts
export default eventHandler(event => `Default page`)

Route Rules

Nitro 允许您在配置的顶层添加逻辑,这对于重定向、代理、缓存和向路由添加标头很有用。

它是从路由模式(遵循 unjs/radix3)到路由选项的映射。

当设置了 cache 选项时,匹配模式的处理程序将自动用 defineCachedEventHandler 包装。

查看 Cache API 了解所有可用的缓存选项。

swr: true|number is shortcut for cache: { swr: true, maxAge: number }

Example:

ts
nitro.config.ts
ts
import { defineNitroConfig } from 'nitropack/config'

export default defineNitroConfig({
  routeRules: {
    '/blog/**': { swr: true },
    '/blog/**': { swr: 600 },
    '/blog/**': { static: true },
    '/blog/**': { cache: { /* cache options */ } },
    '/assets/**': { headers: { 'cache-control': 's-maxage=0' } },
    '/api/v1/**': { cors: true, headers: { 'access-control-allow-methods': 'GET' } },
    '/old-page': { redirect: '/new-page' },
    '/proxy/example': { proxy: 'https://example.com' },
    '/proxy/**': { proxy: '/api/**' },
  }
})