【发布时间】:2022-11-30 03:33:52
【问题描述】:
我正在尝试处理 CORS 问题并添加必要的字符串以响应标头: `
var express = require('express');
const app = express();
var router = express.Router();
router.options('/*', function(req, res, next){
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
res.sendStatus(200);
console.log(res.getHeaders());
});
` 但它不起作用 - console.log(res.getHeaders()) 显示标准标题:
[Object: null prototype] {
'x-powered-by': 'Express',
'content-type': 'text/plain; charset=utf-8',
'content-length': '2',
etag: 'W/"2-nOO9QiTIwXgNtWtBJezz8kv3SLc"'
}
什么可能会阻止触发此功能?
绝望中,我尝试了这个结构: `
router.options('/*', function(req, res, next){
const respond = async function() {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
}
respond()
res.sendStatus(200);
console.log(res.getHeaders());
});
` 它确实有效:
[Object: null prototype] {
'x-powered-by': 'Express',
'access-control-allow-origin': '*',
'access-control-allow-headers': 'Origin, X-Requested-With, Content-Type, Accept',
'content-type': 'text/plain; charset=utf-8',
'content-length': '2',
etag: 'W/"2-nOO9QiTIwXgNtWtBJezz8kv3SLc"'
}
OPTIONS /email 200 4.345 ms - 2
我做错了什么以及在哪里寻找错误
【问题讨论】:
-
我不是 express 方面的专家,但我认为您不应该在另一个处理程序中调用 app.use,它应该在设置时调用,而不是根据请求调用。
-
我试着把它放在路由器外面(之前)——结果是一样的。
-
@JoachimIsaksson,我使用 express-generator 创建应用程序,作为初学者,仍然对将此功能或类似功能放在哪里感到困惑:到根目录中的 /bin/www 或 app.js。实际上,我试着把这个函数放在任何地方,结果都是一样的:)