当前位置: 首页 > news >正文

Nuxt3【服务器】server 详解

server 文件夹中的内容,会被自动注册为API和服务器处理程序。

服务器 API

对应路径 server/api

server/api/hello.ts

export default defineEventHandler((event) => {return {hello: 'world'}
})

页面中使用

<script setup lang="ts">
const { data } = await useFetch('/api/hello')
</script><template><pre>{{ data }}</pre>
</template>

动态参数 []

server/api/hello/[name].ts

export default defineEventHandler((event) => {const name = getRouterParam(event, 'name')return `Hello, ${name}!`
})

[…slug].ts 全匹配

捕获所有API,并通过 event.context.params.slug 访问匹配的内容

export default defineEventHandler((event) => {// 访问 /api/bar/baz ,则 event.context.params.slug 获取路由段:'bar/baz'return `Default foo handler`
})

定义HTTP方法

文件名中使用.get、.post、.put、.delete等后缀来定义HTTP方法

server/api/test.get.ts

export default defineEventHandler(() => 'Test get handler')

GET方法请求 /test 会返回Test get handler

获取 GET 方法中的参数 getQuery

如查询 /api/query?foo=bar&baz=qux

server/api/query.get.ts

export default defineEventHandler((event) => {const query = getQuery(event)return { a: query.foo, b: query.baz }
})

获取 POST 中的请求体 readBody

server/api/submit.post.ts

export default defineEventHandler(async (event) => {const body = await readBody(event)return { body }
})

获取运行时配置 useRuntimeConfig

export default defineEventHandler(async (event) => {const config = useRuntimeConfig(event)const repo = await $fetch('https://api.github.com/repos/nuxt/nuxt', {headers: {Authorization: `token ${config.githubToken}`}})return repo
})

配置信息在 nuxt.config.ts 中定义

export default defineNuxtConfig({runtimeConfig: {githubToken: ''}
})

获取和设置 Cookie 信息

方式一:parseCookies

export default defineEventHandler((event) => {const cookies = parseCookies(event)return { cookies }
})

**方式二:getCookie 和 setCookie **

来自 h3 包

export default defineEventHandler(event => {// 读取counter cookielet counter = getCookie(event, 'counter') || 0// 将counter cookie增加1setCookie(event, 'counter', ++counter)// 发送JSON响应return { counter }
})

错误处理

  • 没有抛出错误,将返回状态码200 OK
  • 任何未捕获的错误都将返回500 Internal Server Error
  • 返回其他错误代码,请使用createError抛出异常

server/api/validation/[id].ts

export default defineEventHandler((event) => {const id = parseInt(event.context.params.id) as numberif (!Number.isInteger(id)) {throw createError({statusCode: 400,statusMessage: 'ID should be an integer',})}return 'All good'
})

状态码

返回其他状态码,请使用setResponseStatus实用程序。

server/api/validation/[id].ts

export default defineEventHandler((event) => {// 返回202 AcceptedsetResponseStatus(event, 202)
})

重定向 sendRedirect

export default defineEventHandler(async (event) => {await sendRedirect(event, '/path/redirect/to', 302)
})

服务器路由

对应路径 server/routes

server/routes/hello.ts

export default defineEventHandler(() => 'Hello World!')

即定义了 /hello 路由

服务器中间件

对应路径 server/middleware

中间件处理程序将在任何其他服务器路由之前在每个请求上运行,以添加或检查标头、记录请求或扩展事件的请求对象。

  • 中间件处理程序不应返回任何内容(也不应关闭或响应请求),只能检查或扩展请求上下文或抛出错误。

server/middleware/log.ts

export default defineEventHandler((event) => {console.log('New request: ' + getRequestURL(event))
})

server/middleware/auth.ts

export default defineEventHandler((event) => {event.context.auth = { user: 123 }
})

服务器插件

对应路径 server/plugins

它们会被注册为Nitro插件。这允许扩展Nitro的运行时行为并钩入生命周期事件。

server/plugins/nitroPlugin.ts

export default defineNitroPlugin((nitroApp) => {console.log('Nitro plugin', nitroApp)
})

服务器工具

对应路径 server/utils

可以添加更多的自定义辅助函数

server/utils/handler.ts

import type { EventHandler, EventHandlerRequest } from 'h3'export const defineWrappedResponseHandler = <T extends EventHandlerRequest, D> (handler: EventHandler<T, D>
): EventHandler<T, D> =>defineEventHandler<T>(async event => {try {// 在路由处理程序之前执行某些操作const response = await handler(event)// 在路由处理程序之后执行某些操作return { response }} catch (err) {// 错误处理return { err }}})

服务器类型

对应路径 server/tsconfig.json
Nuxt >= 3.5 版本中可用

下方代码可提高IDE中对来自’nitro’和’vue’的自动导入的清晰度
server/tsconfig.json

{"extends": "../.nuxt/tsconfig.server.json"
}

服务器类型

对应路径 server/tsconfig.json

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • day05-SpringBoot基础
  • 全面解析ETL:数据仓库架构中的关键处理过程
  • 【流媒体】RTMPDump—Download(接收流媒体信息)
  • 【数据结构-距离合】力扣1685. 有序数组中差绝对值之和
  • 前端宝典十:webpack性能优化最佳实践
  • JS逆向高阶补充
  • Eureka故障排查指南:常见问题与解决方案
  • java将list里的数据使用字符隔开并输出为一个String字符串
  • 网页版IntelliJ IDEA部署
  • 基于vue框架的班级网站的设计与实现vg66m(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 软件测试之常见逻辑思维题
  • 原生JS替换原有元素
  • 【机器学习】线性回归与逻辑回归的极致解析:从数学理论到实战案例
  • 2024年骨传导耳机强强pk:评测南卡、韶音、墨觉哪一款实力更强?
  • 《Linux运维实战:达梦DM8数据库(联机)物理备份之SQL方式归档备份与恢复》
  • [case10]使用RSQL实现端到端的动态查询
  • create-react-app做的留言板
  • Fastjson的基本使用方法大全
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java 多线程编程之:notify 和 wait 用法
  • JAVA之继承和多态
  • js继承的实现方法
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Twitter赢在开放,三年创造奇迹
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 力扣(LeetCode)357
  • 你真的知道 == 和 equals 的区别吗?
  • 排序算法之--选择排序
  • 使用agvtool更改app version/build
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 提醒我喝水chrome插件开发指南
  • 正则与JS中的正则
  • 你对linux中grep命令知道多少?
  • 阿里云API、SDK和CLI应用实践方案
  • ​io --- 处理流的核心工具​
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # 数论-逆元
  • #Ubuntu(修改root信息)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (NSDate) 时间 (time )比较
  • (pytorch进阶之路)扩散概率模型
  • (二)c52学习之旅-简单了解单片机
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (三)模仿学习-Action数据的模仿
  • (十八)三元表达式和列表解析
  • (转)ABI是什么
  • (转载)Google Chrome调试JS
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .jks文件(JAVA KeyStore)