Next.js 路由处理器(route.js)深度解析
2025-07-05 01:05:25作者:董宙帆
什么是路由处理器?
在 Next.js 应用中,路由处理器(route.js)是一种特殊的文件约定,它允许开发者基于 Web 标准的 Request 和 Response API 为特定路由创建自定义请求处理器。这种机制为构建 API 端点提供了极大的灵活性,同时保持了与 Web 标准的兼容性。
核心特性
HTTP 方法支持
路由处理器支持所有标准 HTTP 方法,包括:
- GET:获取资源
- POST:创建资源
- PUT:更新整个资源
- PATCH:部分更新资源
- DELETE:删除资源
- HEAD:获取资源头信息
- OPTIONS:获取支持的HTTP方法
// 示例:支持多种HTTP方法的路由处理器
export async function GET(request) {
// 处理GET请求逻辑
}
export async function POST(request) {
// 处理POST请求逻辑
}
特别值得注意的是,OPTIONS 方法在未显式定义时,Next.js 会自动实现并根据已定义的其他方法设置适当的 Response Allow 头部。
参数详解
Request 对象
路由处理器接收的 request 参数是 NextRequest 对象,它扩展了标准的 Web Request API,提供了更多便利功能:
- 便捷的 cookies 访问
- 增强的 URL 解析(nextUrl)
- 请求头操作
- 请求体解析
export async function GET(request) {
// 访问cookie
const token = request.cookies.get('authToken');
// 获取查询参数
const searchParams = request.nextUrl.searchParams;
const page = searchParams.get('page');
}
Context 参数
context 参数目前主要包含路由的动态参数(params),这在处理动态路由时特别有用:
// 文件路径: app/products/[id]/route.js
export async function GET(request, { params }) {
const productId = params.id; // 获取动态路由参数
}
动态路由参数支持多种匹配模式:
- 单参数匹配:
[param]
- 多参数匹配:
[tag]/[item]
- 捕获所有路由:
[...slug]
响应处理
路由处理器可以返回标准的 Response 对象,也可以使用 Next.js 提供的增强版 NextResponse:
import { NextResponse } from 'next/server';
export async function GET() {
// 返回JSON响应
return NextResponse.json({ message: '成功' }, { status: 200 });
// 重定向
return NextResponse.redirect('/new-location');
// 设置cookie
const response = NextResponse.json({});
response.cookies.set('theme', 'dark');
return response;
}
最佳实践
- 组织API端点:将相关API端点组织在同一路由下,保持代码结构清晰
- 错误处理:统一处理错误,返回适当的HTTP状态码
- 类型安全:使用TypeScript增强类型检查
- 中间件:结合Next.js中间件处理认证等跨路由逻辑
- 缓存策略:根据需求设置适当的缓存头
版本演进
- v15.0.0:GET 处理器的默认缓存行为从静态更改为动态
- v13.2.0:首次引入路由处理器功能
总结
Next.js 的路由处理器提供了一种现代化、符合Web标准的方式来构建API端点。它完美集成在应用路由(App Router)中,消除了传统API路由(pages)和页面路由分离的需要。通过利用Web标准API和Next.js的扩展功能,开发者可以构建高效、灵活的后端逻辑,同时保持代码的一致性和可维护性。
对于新项目,建议直接使用路由处理器而非传统的API路由,它能更好地与现代React特性(如Server Components)配合工作,提供更一致的开发体验。