Next.js 13:如何从动态路由访问全局API路由处理器?
解决Next.js动态路由下API路由全局可访问的问题
方法一:使用Next.js重写规则(推荐)
在next.config.js中配置重写规则,将任意路径前缀下的/api/create请求转发到根路径的API路由,无需复制代码:
/** @type {import('next').NextConfig} */ const nextConfig = { async rewrites() { return [ { source: '/:path*/api/create', destination: '/api/create', }, ]; }, }; module.exports = nextConfig;
:path*会匹配任意层级的前缀路径(包括空路径),比如/dashboard/api/create、/foo/bar/api/create都会被转发到/api/create,由原/app/api/create/route.js处理。- 修改配置后重启开发服务器生效。
方法二:创建共享API处理函数
将API逻辑抽离为独立模块,在需要的路由文件中导入复用,避免代码重复:
- 新建共享处理文件
lib/api-handlers/create.js,迁移原API逻辑:
// lib/api-handlers/create.js export async function GET() { return new Response(JSON.stringify({ hello: "world" }), { headers: { "Content-Type": "application/json" }, }); } // 若有POST/PUT等其他请求方法,同步导出即可
- 在根路径API路由中导入:
// app/api/create/route.js export { GET } from '@/lib/api-handlers/create';
- 在动态路由下的API路由中导入:
// app/[...slug]/api/create/route.js export { GET } from '@/lib/api-handlers/create';
这样无论访问根路径还是任意动态路由下的/api/create,都会调用同一个处理函数,后续修改逻辑只需维护一处即可。
内容的提问来源于stack exchange,提问作者Rohit Handique
相关产品推荐
相关产品推荐

