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')
})