第 6 章:API 路由(后端能力)

第 6 章:API 路由(后端能力)

Next.js 不仅能渲染页面,还内置了 API 路由功能 ,可以在 pages/api/ 目录中直接编写后端接口,支持处理请求、读写数据库、返回 JSON 等。


6.1 什么是 API 路由?

API 路由就是运行在 服务器端的 JavaScript 函数,每个文件导出一个 handler 函数(req, res)即构成一个 API 接口。

📁 示例结构:

bash 复制代码
pages/
└── api/
    ├── hello.js         // GET: /api/hello
    └── user/
        └── login.js     // POST: /api/user/login

6.2 编写第一个 API 路由

📄 pages/api/hello.js

js 复制代码
export default function handler(req, res) {
  res.status(200).json({ message: 'Hello from API' });
}
  • 访问路径:http://localhost:3000/api/hello
  • 返回结果:{ "message": "Hello from API" }

✅ 所有 API 路由 只能使用默认导出,且只运行在服务端,不会被打包进客户端。


6.3 支持多种 HTTP 方法(GET、POST 等)

示例:pages/api/user.js

js 复制代码
export default function handler(req, res) {
  const { method } = req;

  switch (method) {
    case 'GET':
      res.status(200).json({ name: 'Eric' });
      break;
    case 'POST':
      const body = req.body;
      res.status(201).json({ message: '用户创建成功', data: body });
      break;
    default:
      res.setHeader('Allow', ['GET', 'POST']);
      res.status(405).end(`Method ${method} Not Allowed`);
  }
}

前端请求示例(使用 fetch):

js 复制代码
fetch('/api/user', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: 'Eric' })
});

6.4 路由结构与嵌套目录

你可以根据业务组织接口目录,比如:

bash 复制代码
pages/api/
├── user/
│   ├── login.js      // /api/user/login
│   └── register.js   // /api/user/register
├── product/
│   └── [id].js       // /api/product/123
└── index.js          // /api

动态路由也适用于 API,比如:

📄 pages/api/product/[id].js

js 复制代码
export default function handler(req, res) {
  const { id } = req.query;
  res.status(200).json({ productId: id });
}

6.5 处理请求参数(query、body、headers)

js 复制代码
export default function handler(req, res) {
  const { method, query, body, headers } = req;

  console.log('Query:', query);
  console.log('Body:', body);
  console.log('Headers:', headers);

  res.status(200).json({ ok: true });
}

6.6 中间件模拟(权限验证、CORS)

Next.js API 路由不支持传统 Express 中间件,但可以手动实现。

示例:简单权限校验

js 复制代码
export default function handler(req, res) {
  const token = req.headers.authorization;

  if (token !== 'Bearer 123456') {
    return res.status(401).json({ error: 'Unauthorized' });
  }

  res.status(200).json({ message: '验证通过' });
}

示例:设置 CORS

js 复制代码
export default function handler(req, res) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST');

  if (req.method === 'OPTIONS') {
    return res.status(200).end(); // 处理预检请求
  }

  res.status(200).json({ data: 'OK' });
}

6.7 API 路由常见用途

  • 登录/注册处理
  • 表单数据提交
  • 请求数据库或第三方 API
  • 文件上传(需 multipart 处理)
  • 管理后台接口
  • 搭配客户端 fetch / useSWR 获取数据

✅ 小结

能力 方法
编写接口 pages/api/ 中创建 .js 文件
接收请求 使用 req.query, req.body, req.method
返回响应 res.status(code).json(data)
支持方法 GET / POST / PUT / DELETE / PATCH 等
接口嵌套结构 文件夹组织,支持动态路由 [id].js
中间件模拟 手动添加 header 检查、权限验证逻辑
相关推荐
Wcowin22 分钟前
MkDocs文档日期插件【推荐】
前端·mkdocs
xw51 小时前
免费的个人网站托管-Cloudflare
服务器·前端
网安Ruler1 小时前
Web开发-PHP应用&Cookie脆弱&Session固定&Token唯一&身份验证&数据库通讯
前端·数据库·网络安全·php·渗透·红队
!win !1 小时前
免费的个人网站托管-Cloudflare
服务器·前端·开发工具
饺子不放糖2 小时前
基于BroadcastChannel的前端多标签页同步方案:让用户体验更一致
前端
饺子不放糖2 小时前
前端性能优化实战:从页面加载到交互响应的全链路优化
前端
Jackson__2 小时前
使用 ICE PKG 开发并发布支持多场景引用的 NPM 包
前端
饺子不放糖2 小时前
前端错误监控与异常处理:构建健壮的Web应用
前端
cos2 小时前
FE Bits 前端周周谈 Vol.1|Hello World、TanStack DB 首个 Beta 版发布
前端·javascript·css
饺子不放糖2 小时前
CSS的float布局,让我怀疑人生
前端