我正在尝试使用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));
因此,我希望将callback(new Error("Not allowed by CORS"));
这一部分替换为仅发送状态401和结束流,以便在客户端中不打印堆栈错误。
3条答案
按热度按时间3hvapo4f1#
根据源代码,您在
callback
中发送的内容是无法完成的,因为err
是在next
函数中传递的,如但有一个简单的变通办法,你想要什么。
cors()
返回了一个中间件(一个有req,res和next三个参数的函数),所以你可以把cors封装在中间件中,然后返回你想要的任何东西,如果一切都很完美,你可以使用cors
。kq4fsx7k2#
我发现一个解决方法是,您可以先在变量上构造
Error
,然后从error变量中删除stack
属性:希望这能有所帮助!
eufgjt7s3#
你可以做这样的事
这将返回一个JSON响应但主要是一个
403
状态代码。