第 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 检查、权限验证逻辑
相关推荐
你的人类朋友1 小时前
【Node&Vue】什么是ECMAScript?
前端·javascript·后端
路灯下的光1 小时前
用scss设计一下系统主题有什么方案吗
前端·css·scss
l_tian_tian_1 小时前
SpringClound——网关、服务保护和分布式事务
linux·服务器·前端
一只小风华~2 小时前
CSS @media 媒体查询
前端·css·媒体
shix .2 小时前
最近 | 黄淮教务 | 小工具合集
前端·javascript
John_ToDebug3 小时前
Chrome 内置扩展 vs WebUI:浏览器内核开发中的选择与实践
前端·c++·chrome
烛阴3 小时前
解锁动态键:TypeScript 索引签名完全指南
前端·javascript·typescript
上单带刀不带妹4 小时前
ES6 中的 Proxy 全面讲解
前端·ecmascript·es6·proxy
11054654015 小时前
37、需求预测与库存优化 (快消品) - /供应链管理组件/fmcg-inventory-optimization
前端·信息可视化·数据分析·js
nunumaymax5 小时前
在图片没有加载完成时设置默认图片
前端