如何在Next.js中限制特定API端点的生产环境访问?
在Next.js中禁用生产环境的API端点
可以通过两种方式实现,具体如下:
方法一:用 Middleware 全局拦截
在项目根目录新建 middleware.js(或 .ts)文件,通过全局中间件拦截指定API路径,生产环境下直接返回禁止访问的响应:
import { NextResponse } from 'next/server'; export function middleware(request) { const isProduction = process.env.NODE_ENV === 'production'; // 列出所有需要禁用的API路径 const restrictedPaths = ['/api/dev-only', '/api/local-test']; if (isProduction && restrictedPaths.includes(request.nextUrl.pathname)) { return new NextResponse('此端点仅支持本地环境访问', { status: 403 }); } return NextResponse.next(); } // 只对API路径生效,避免拦截其他页面 export const config = { matcher: '/api/:path*', };
方法二:在单个API端点内判断环境
如果只是少数几个API需要禁用,直接在对应的API文件开头添加环境判断逻辑即可,无需全局中间件:
App Router 示例
// app/api/dev-only/route.js export async function GET(request) { if (process.env.NODE_ENV === 'production') { return new Response('此端点在生产环境不可用', { status: 403 }); } // 本地环境执行的业务逻辑 return new Response('本地测试返回内容', { status: 200 }); }
Pages Router 示例
// pages/api/dev-only.js export default function handler(req, res) { if (process.env.NODE_ENV === 'production') { res.status(403).json({ message: '此端点仅支持本地环境访问' }); return; } // 本地环境的处理逻辑 res.status(200).json({ message: '本地测试响应' }); }
关于 next.config.mjs 的说明
next.config.mjs主要负责Next.js的构建配置、路由规则等基础设置,无法直接实现API端点的禁用逻辑,所以不建议用它来处理这个需求。
内容的提问来源于stack exchange,提问作者psygo
相关产品推荐
相关产品推荐

