这是 Nuxt 和“只做前端”的 Vue 项目最关键的分水岭之一。
官方文档明确说:
server/用于注册 API 和 server handlers- 底层服务引擎是 Nitro
server/api/自动带/api前缀server/routes/是无/api前缀的服务路由
目录映射:
server/
├── api/
│ └── hello.ts -> /api/hello
├── routes/
│ └── rss.xml.ts -> /rss.xml
└── middleware/
└── log.ts#1. 最基础的 API 路由
// server/api/hello.ts
export default defineEventHandler(() => {
return {
hello: 'world'
}
})页面里直接取:
<script setup lang="ts">
const { data } = await useFetch('/api/hello')
</script>
<template>
<pre>{{ data }}</pre>
</template>#2. 不带 /api 的路由
// server/routes/rss.xml.ts
export default defineEventHandler(() => {
return '<rss><channel><title>Software City TV</title></channel></rss>'
})这就像:
server/api/是新闻热线窗口server/routes/是对外播出附属产物,比如 RSS、sitemap、健康检查
#3. Nitro 到底是什么?
Nuxt 官方文档的核心意思可以概括为:
Nuxt = 前后台统一节目系统
Nitro = 播控与发射引擎Nitro 负责:
- 跑服务端逻辑
- 构建 server output
- 适配 Node / Serverless / Edge
- 支撑 hybrid rendering
所以你别把 Nuxt 的“服务端能力”理解成“顺手送了你几个 API 文件”。
它背后是整套可部署的服务引擎。