服务器路由
Nuxt 会自动扫描 、 和 目录中的文件~/server/api,~/server/routes以~/server/middleware注册具有 HMR 支持的 API 和服务器处理程序。
每个文件都应该导出一个用defineEventHandler().
处理程序可以直接返回 JSON 数据,Promise或者用于event.res.end()发送响应。
👉
在Nitro 路线处理文档 中阅读更多内容。
例子
在中创建一个新文件server/api/hello.ts:
/server/api/hello.ts
export default defineEventHandler((event) => {
return {
api: 'works'
}
})
您现在可以使用await $fetch('/api/hello').
服务器路由
中的文件在其路由~/server/api中自动添加前缀。/api要添加不带前缀的服务器路由/api,您可以将它们放入~/server/routes目录中。
例子:
/server/routes/hello.ts
export default defineEventHandler(() => 'Hello World!')
鉴于上面的示例,/hello可以通过http://localhost:3000/hello访问该路由。
服务器中间件
Nuxt 会自动读入任何文件,~/server/middleware为你的项目创建服务器中间件。
中间件处理程序将在任何其他服务器路由之前在每个请求上运行,以添加检查和一些标头、记录请求或扩展事件的请求对象。
中间件处理程序不应返回任何内容(也不应关闭或响应请求),而应仅检查或扩展请求上下文或引发错误。
例子:
/server/middleware/log.ts
export default defineEventHandler((event) => {
console.log('New request: ' + event.req.url)
})
/server/middleware/auth.ts
export default defineEventHandler((event) => {
event.context.auth = { user: 123 }
})
服务器实用程序
服务器路由由unjs/h3提供支持,它带有一组方便的助手。
👉
在可用的 H3 请求帮助程序 中阅读更多信息。
您可以在~/server/utils目录中自行添加更多帮助程序。
使用示例
匹配路由参数
服务器路由可以在文件名中使用括号内的动态参数,例如/api/hello/[name].ts并通过event.context.params.
例子:
/server/api/hello/[name].ts
export default defineEventHandler(event => `Hello, ${event.context.params.name}!`)
您现在可以使用await $fetch('/api/hello/nuxt')和 get普遍调用此 API Hello, nuxt!。
匹配 HTTP 方法
句柄文件名可以后缀为.get, .post, .put, .delete, … 以匹配请求的HTTP Method。
/server/api/test.get.ts
export default defineEventHandler(() => 'Test get handler')
/server/api/test.post.ts
export default defineEventHandler(() => 'Test post handler')
鉴于上面的示例,获取/test:
- GET方法:返回
Test get handler - POST方法:返回
Test post handler - 任何其他方法:返回 404 错误
本文介绍了Nuxt3中如何设置服务器路由、API处理程序和中间件。通过创建特定的文件结构,开发者可以注册带有HMR支持的API和服务器路由,同时利用服务器中间件进行请求拦截和扩展。示例包括动态路由参数和匹配HTTP方法的处理程序。
1210

被折叠的 条评论
为什么被折叠?



