Javascript cors包发送状态而不是错误
我正在尝试使用Javascript cors包发送状态而不是错误,javascript,node.js,express,cors,Javascript,Node.js,Express,Cors,我正在尝试使用node和express环境中的cors包来验证请求域是否可以访问我的资源。根据官方文件,这一部分不是问题。然而,问题在于反应。如果不允许域访问-cors正在发送堆栈跟踪错误(文件路径)。是否可以避免这种情况,只需使用状态401进行响应,比如res.status(401).end()?我试过了,但它给了我错误,因为已经发送了标题 const cors = require("cors"); const corsOptions = async (req, callback) =>
node
和express
环境中的cors
包来验证请求域是否可以访问我的资源。根据官方文件,这一部分不是问题。然而,问题在于反应。如果不允许域访问-cors
正在发送堆栈跟踪错误(文件路径)。是否可以避免这种情况,只需使用状态401进行响应,比如res.status(401).end()
?我试过了,但它给了我错误,因为已经发送了标题
const cors = require("cors");
const corsOptions = async (req, callback) => {
let domain = getDomain(req);
if (domain === false) {
return callback(new Error("Not allowed by CORS"));
}
const isWhitelisted = await client.get(domain).catch(err => { console.log(err); });
if (isWhitelisted !== undefined) {
callback(null, true);
} else {
callback(new Error("Not allowed by CORS"));
}
};
app.use(cors(corsOptions));
所以我希望替换
回调(新错误(“CORS不允许”)代码>此部分仅具有发送状态401和结束流,因此在客户端中不会打印堆栈错误。根据源代码,当err
在下一个函数中传递时,在回调中发送的是无法完成的
if(err) next(err);
但有一个简单的解决办法,你想要什么
cors()
返回一个中间件(一个具有三个参数req、res和next的函数)。因此,您可以将COR封装在中间件中,并返回您想要的任何内容。如果一切都很完美,您可以使用cors
const app = require('express')();
const cors = require("cors");
const corsMid = (req, res, next)=>{
const trueVal = true;
if(trueVal){
res.status(400).send("Error")
}else{
return cors()(req,res,next);
}
}
app.use(corsMid);
app.get('/', (req, res)=>{
res.json('Hello World');
})
app.listen(8080, ()=>{
console.log('started')
})