如何在Node.js中使用条件式CORS以支持本地运行
解决Node.js环境下CORS配置手动注释的问题
可以通过环境变量配合条件判断彻底解决这种需要手动注释代码的麻烦,以下是具体实现方案:
方案一:利用NODE_ENV环境变量区分环境
Node.js默认支持NODE_ENV环境变量,通常用来标记当前是开发环境还是生产环境,大部分部署平台会自动将生产环境的NODE_ENV设置为production,我们可以基于这个变量做判断:
修改后的代码如下:
const express = require("express"); const cors = require("cors"); const app = express(); app.use(express.json()); // 根据环境自动启用CORS配置 if (process.env.NODE_ENV === "development") { app.use( cors({ origin: "http://localhost:3000/" }) ); } app.get("/api/hello", (_req, res, next) => { res.send("hello"); }); app.use((err, req, res, next) => { // some operation }); const port = 8000; app.listen(port, () => { logger.info(`Server running on ${port}...`); });
本地运行配置
在package.json的scripts中添加开发命令,方便快速启动:
"scripts": { "start": "node app.js", "dev": "NODE_ENV=development node app.js" }
- 本地开发时执行
npm run dev,自动启用本地CORS配置 - 生产环境执行
npm start(或通过部署平台启动,此时NODE_ENV会被设为production,CORS配置不会生效)
方案二:自定义环境变量(更直观)
如果不想依赖NODE_ENV,也可以自定义一个环境变量,比如LOCAL_DEV:
// 根据自定义变量判断是否启用本地CORS if (process.env.LOCAL_DEV === "true") { app.use( cors({ origin: "http://localhost:3000/" }) ); }
本地运行时直接执行:
# macOS/Linux LOCAL_DEV=true node app.js # Windows set LOCAL_DEV=true && node app.js
这样就能完全避免手动注释代码的操作,同时保证代码提交时不需要做任何修改。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

