CORS模块:你的跨域快速通行证 [特殊字符]
文章目录
- CORS模块:你的跨域"快速通行证" 🚀
- 1. 传统手动CORS vs 现代CORS模块
- (1)原始方式:手动设置响应头("纸质通行证")
- (2)现代方式:`cors`中间件("电子快速通道")
- 2. `cors`模块的进阶用法
- (1)限制特定来源(白名单)
- (2)允许携带Cookie
- (3)自定义错误处理
- 3. 为什么推荐用`cors`模块?
- 4. 其他框架的CORS方案
- (1)Koa:`@koa/cors`
- (2)Fastify:`fastify-cors`
- (3)甚至浏览器扩展也能测CORS
- 5. 灵魂总结

CORS模块:你的跨域"快速通行证" 🚀
是的,你没有听错!现代Node.js开发中,我们不再需要手动写
res.setHeader()
来配置CORS了,而是可以用专门的CORS模块一键搞定,就像把复杂的通关手续升级成了"电子快速通行证"!
1. 传统手动CORS vs 现代CORS模块
(1)原始方式:手动设置响应头(“纸质通行证”)
// Node.js原生写法
res.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
res.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT");
res.setHeader("Access-Control-Allow-Headers", "Content-Type");
痛点:
- 容易漏掉某些头(比如
OPTIONS
预检请求) - 重复代码多(每个路由都要写)
(2)现代方式:cors
中间件(“电子快速通道”)
npm install cors # 先安装
const express = require('express');
const cors = require('cors');
const app = express();// 一行代码启用全站CORS!
app.use(cors()); // 默认允许所有来源(*)
优势:
- 自动处理
OPTIONS
预检请求 - 支持精细配置(白名单、特定方法等)
- 代码干净得像用了"去污剂" 🧼
2. cors
模块的进阶用法
(1)限制特定来源(白名单)
const corsOptions = {origin: ['https://your-site.com', 'http://localhost:3000'],methods: ['GET', 'POST']
};app.use(cors(corsOptions));
👉 像俱乐部门卫,只放行VIP会员(指定域名)
(2)允许携带Cookie
const corsOptions = {origin: 'http://localhost:3000',credentials: true // 允许跨域传Cookie
};app.use(cors(corsOptions));
👉 前端需要配合:
fetch(url, { credentials: 'include'
});
(3)自定义错误处理
app.use(cors({origin: (origin, callback) => {if (whitelist.includes(origin)) {callback(null, true);} else {callback(new Error('Not allowed by CORS! 🚫'));}}
}));
👉 像安检仪,不合格的行李直接拒之门外
3. 为什么推荐用cors
模块?
特性 | 手动设置头 | cors 模块 |
---|---|---|
代码简洁度 | ❌ 冗长 | ✅ 一行搞定 |
预检请求处理 | 要自己写 | 自动处理 |
动态来源控制 | 难实现 | 轻松配置 |
错误处理 | 手动 | 内置支持 |
维护性 | 容易出错 | 标准化 |
4. 其他框架的CORS方案
(1)Koa:@koa/cors
const Koa = require('koa');
const cors = require('@koa/cors');const app = new Koa();
app.use(cors());
(2)Fastify:fastify-cors
const fastify = require('fastify')();
fastify.register(require('fastify-cors'));
(3)甚至浏览器扩展也能测CORS
比如 CORS Unblock(开发调试用,别在生产依赖!)
5. 灵魂总结
- 2015年:“兄弟们,跟我一起手写CORS头!” 🤯
- 2024年:“
app.use(cors())
,下班!” 🍺
黄金法则:
除非你要实现极其特殊的CORS逻辑,否则永远用
cors
模块!
它就像给你的API装了个智能门禁系统,安全又省心~ 🔐