Express+NodeJS开发中CORS策略拦截请求问题求助
解决Express服务器的CORS跨域问题
先梳理两个关键问题及对应的解决办法:
1. 核心问题:未配置CORS响应头
你当前仅设置了Content-Type,但跨域请求需要服务器返回CORS相关响应头才能被浏览器放行。提供两种解决方式:
方式一:使用官方cors中间件(推荐)
这是最便捷的实现方式,步骤如下:
- 安装依赖:
npm install cors
- 在Express应用中引入并启用:
const cors = require('cors'); const app = express(); // 全局启用CORS,允许所有来源的请求(生产环境建议指定具体域名) app.use(cors()); // 再定义你的接口逻辑 app.get(`/important`, function(req,res){ fs.readFile('./json/important.json', `utf8`, function(err, data){ console.log(data) res.set('Content-Type', 'application/json') res.status(200) res.end(data) }) })
方式二:手动设置CORS响应头
如果不想额外安装依赖,可直接在接口中添加CORS相关头:
app.get(`/important`, function(req,res){ // 添加CORS响应头 res.set('Access-Control-Allow-Origin', '*'); // 允许所有域名访问,生产环境替换为具体域名 res.set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); // 允许的请求方法 res.set('Access-Control-Allow-Headers', 'Content-Type'); // 允许的请求头 fs.readFile('./json/important.json', `utf8`, function(err, data){ console.log(data) res.set('Content-Type', 'application/json') res.status(200) res.end(data) }) })
2. 额外注意:请求路径不匹配
客户端fetch请求的是/morbius,但服务器仅定义了/important接口,这会导致请求返回404错误。需要将客户端请求路径改为/important,或在服务器上新增/morbius的接口处理逻辑。
修改后的客户端示例代码:
fetch("http://127.0.0.1:3031/important") .then(result=>{ return result.json(); // 需返回解析后的Promise,后续才能拿到数据 }) .then(data => { console.log(data); }) .catch(err => { console.error('请求出错:', err); })
内容的提问来源于stack exchange,提问作者gjoe
相关产品推荐
相关产品推荐

