nuxt3-api

本文介绍了Nuxt3中如何设置服务器路由、API处理程序和中间件。通过创建特定的文件结构,开发者可以注册带有HMR支持的API和服务器路由,同时利用服务器中间件进行请求拦截和扩展。示例包括动态路由参数和匹配HTTP方法的处理程序。

服务器路由

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 错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值