基于文件的路由
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/**' },
}
})