返回顶部
首页 > 资讯 > 前端开发 > JavaScript >nuxt3中serverroutes的使用详解
  • 757
分享到

nuxt3中serverroutes的使用详解

2024-04-02 19:04:59 757人浏览 泡泡鱼
摘要

目录匹配路由参数Http方法匹配处理请求体处理get请求路由参数最近在学习nuxt3,学习过程中可参考的中文文档并不是特别多,今天在学习server routes的使用方式,可参考的

最近在学习nuxt3,学习过程中可参考的中文文档并不是特别多,今天在学习server routes的使用方式,可参考的文档就更少了,于是只能自己啃官方文档,顺便记录下自己的学习心得,也希望能够给其他新入门的学习者一点儿借鉴,如有说的不对的地方,欢迎大家指正,在下一定虚心接受。

nuxt3在后端服务器这块引入了Nitro框架,感兴趣的朋友可以移步到官方网站进行了解和学习,个人感觉类似nodejs框架里面的express 和 koa吧,只是可能更轻量吧。

在创建api之前,我们首先需要在根目录下创建一个server 目录,nuxt3会自动检索目录中的api目录,routes目录以及middleware目录,并根据这些目录里面的文件名自动创建对应的api。

比如我们想要创建一个api/hello的api,首先我们需要在server 目录下创建api目录,并且在api目录下创建一个名为hello.ts。

// server/api/hello.ts
export default defineEventHandler((event) => {
  return {
    api: 'works'
  }
})

注意:每个文件都需要导出一个默认的命名为defineEventHandler的函数,这样我们在代码中就可以通过 await $fetch('/api/hello')这种方式进行调用了。通过defineEventHandler可以返回JSON格式的数据,也可以返回一个Promise,也可以直接使用event.res.end()进行返回。

通过在server/api目录下创建文件的方式,nuxt会自动生成/api/filename 这样的访问路径,如果我们在开发过程中不想使用/api/filename这样的访问路径,而是希望可以直接通过 /filename这种的文件路径,那么我们可以在server目录下创建routes目录,并且在该目录下创建对应的文件即可。

// server/routes/hello.ts
export default defineEventHandler(() => 'Hello World!')

此时我们就可以直接使用await $fetch('/hello')进行访问了,是不是很方便?

如果想在nuxt3中使用中间件,那么我们需要在server目下下创建middleware目录,并将自己创建的中间件文件放置在该目录下

中间件处理程序,会应用在每一个api路由之前,它可以用来增加路由检测、增加请求header信息或者记录请求日志,也可以用来扩展event请求对应

// 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 } // 扩展event上下文
})

匹配路由参数

server routes 可以处理动态路由,在文件名中间使用中括号的方式,这点儿和前端动态路由类似,比如server/api/hello-[name].ts,访问动态路由参数可以通过event.context.params对象进行访问。

export default defineEventHandler(event => `Hello, ${event.context.params.name}!`)

代码中就可以通过$fetch('/api/hello/nuxt')这种方式进行调用了

以上方式创建的路由默认都是get方式进行访问,如果我们想要创建post,put,delete等方式的请求处理函数应该怎么操作呢?

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')
复制代码

以上两个文件分别以.get 和 .post后缀,那么在代码请求中就只能使用相对应的get、post方式进行请求,如果换成其他方式,直接返回404 error

处理请求体

post请求中,一般都会在请求体里面传入一些参数,获取请求体参数可以通过以下这种方式

// server/api/submit.post.ts
export default defineEventHandler(async (event) => {
    const body = await useBody(event)
    return { body }
})

前端传入参数可以通过以下方式

$fetch('/api/submit', { method: 'post', body: { test: 123 } })

注意:此时我们创建了一个submit.post的文件用以处理post请求,此时我们使用useBody可以接收到前端传来的请求参数。但如果我们使用get方式请求该API,那么接口会抛出r405 Method Not Allowed HTTP error

处理get请求路由参数

例如:/api/query?param1=a&param2=b

// server/api/query.get.ts
export default defineEventHandler((event) => {
  const query = useQuery(event)
  return { a: query.param1, b: query.param2 }
})

以上就是关于nuxt3中创建接口api以及路由中间件的使用方式,官网还有一些嵌套路由以及streams处理方法(还处于实验阶段),感兴趣的朋友可以移步官方文档进行发掘 server routes

到此这篇关于nuxt3中server routes的使用详解的文章就介绍到这了,更多相关nuxt3 server routes内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: nuxt3中serverroutes的使用详解

本文链接: https://lsjlt.com/news/149407.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • nuxt3中serverroutes的使用详解
    目录匹配路由参数Http方法匹配处理请求体处理get请求路由参数最近在学习nuxt3,学习过程中可参考的中文文档并不是特别多,今天在学习server routes的使用方式,可参考的...
    99+
    2024-04-02
  • Nuxt3 布局layouts和NuxtLayout的使用详解
    Nuxt3是基于Vue3的一个开发框架,基于服务器端渲染SSR,可以更加方便的用于Vue的SEO优化。 用Nuxt3 SSR模式开发出来的网站,渲染和运行速度非常快,性能也非常高,而...
    99+
    2023-05-18
    Nuxt3 布局layouts和NuxtLayout Nuxt3 layouts使用
  • nuxt3中的server routes如何使用
    这篇“nuxt3中的server routes如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nuxt3中的...
    99+
    2023-06-30
  • 教你如何在Nuxt3中使用wavesurfer.js
    目录安装 wavesurfer.js常规方式引入正确的引入方式加载插件加载波形数据暴露插件的方法项目安装 wavesurfer.js 在项目中安装 wavesurfer.js npm...
    99+
    2023-01-15
    Nuxt 3 使用 wavesurfer.js wavesurfer.js使用
  • node.js中的require使用详解
    代码注释里已经描述的非常的清晰,这里就不多废话了,直接奉上代码: //建立一个页面2.js;代码如下 var name="思思博士"; exports.name=name; //建立一个页面1....
    99+
    2022-06-04
    详解 node js
  • CentOS8中的nmcli使用详解
    基于RHEL8/CentOS8的nmcli常见命令使用 # 查看ip(类似于ifconfig、ip addr) nmcli # 创建connection,配置静态ip(等同于配置ifcfg,其中BOOTPROTO=n...
    99+
    2022-06-04
    CentOS8 nmcli使用
  • Android 中Banner的使用详解
    首先倒入一个依赖: compile 'com.youth.banner:banner:1.4.9' 添加的权限: <uses-permission android:n...
    99+
    2022-06-06
    Android
  • 详解Android中Dialog的使用
    在Android中经常要使用Dialog来实现一些提示以及一些特殊的效果,而且样式也不一样,每次都得查一大堆资料,还不一定能解决,这里总结一些常用的Dialog的实践。 普通的...
    99+
    2022-06-06
    dialog Android
  • Android中的android:layout_weight使用详解
    在使用LinearLayout的时候,子控件可以设置layout_weight。layout_weight的作用是设置子空间在LinearLayout的重要度(控件的大小比重)...
    99+
    2022-06-06
    weight Android
  • 详解MySQL中default的使用
    NULL 和 NOT NULL 修饰符、DEFAULT 修饰符,AUTO_INCREMENT 修饰符。 NULL 和 NOT NULL 修饰符 可以在每个字段后面都加上这 NULL 或 NOT NULL 修...
    99+
    2024-04-02
  • Vue中bus的使用详解
    vue总线机制(bus) vue中非父子组件之间通信除了使用vuex,也可以通过bus总线,两者适用场景不同。 bus适合小项目、数据被更少组件使用的项目,对于中大型项目 数据在很多...
    99+
    2024-04-02
  • 详解Vue3中Teleport的使用
    目录Teleport 的目的 Teleport 是怎样工作的 在本文中,我们将介绍: Teleport 的目的 Teleport 的例子 一些很有意思的代码...
    99+
    2024-04-02
  • 详解Java 中 RMI 的使用
    目录RMI 介绍RMI 工作原理RMI 开发RMI ServerRMI ClientRMI 测试serialVersionUID 的生成 RMI 介绍 RMI (Remote Met...
    99+
    2024-04-02
  • 详解Android中AIDL的使用
    AIDL,即Android Interface Definition Language,Android接口定义语言。这门语言是为了实现进程间通信。每一个进程都有自己的一块独立的内存,...
    99+
    2024-04-02
  • IDEA中GitLab的使用详解
      首先安装git https://git-scm.com/downloads/下载对应的版本   下载好了,安装打开 Windows. 打开之后2步走,与git连接 首先选择仓库...
    99+
    2024-04-02
  • Android中PreferenceFragment的使用详解
    目录PreferenceFragment简介PreferenceFragment使用PreferenceFragment 扩展PreferenceFragment简介 在我们写一个...
    99+
    2024-04-02
  • vue中axios的使用详解
    目录1、选择什么网络模块2、JSONP3、axios的请求方式4、axios框架的基本使用1、新建vue项目2、安装axios依赖3、编写代码4、请求结果5、axios发送并发请求方...
    99+
    2024-04-02
  • Vue中webpack的使用详解
    目录1、什么是Webpack2、模块化的演进AMDCMDES6模块3、安装Webpack4、使用webpack总结1、什么是Webpack 本质上, webpack是一个现代Java...
    99+
    2024-04-02
  • pytorch中transforms的使用详解
    目录transformsToTensortransforms使用为什么需要tensor数据类型呢?常见的transforms内置方法__call__()NormalizeResize...
    99+
    2024-04-02
  • Laravel中Kafka的使用详解
    本文并没有kafka的安装教程,本文是针对已经安装kafka及其配置好kafka的php拓展并且使用laravel框架进行开发项目,配置一个可供laravel框架使用的生产及消费...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作