我在我的节点api上得到了下面的错误,这实际上只是控制台在这一点上记录请求。
router.get('/booksByISBN', checkRole, async (req, res) => {
console.log(req.params)
return res.sendStatus(200);
});
node:internal/errors:484
ErrorCaptureStackTrace(err);
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
我相信这个问题是因为飞行前的CORS数据,但没有线索如何解决它。
在我的Angular 15应用程序中有一个API调用,但在检查Network选项卡时,我看到实际上有两个API调用正在对我的端点进行。
我知道这是因为CORS选项请求,但我不知道如何修复它,让API通过。
CheckRole函数
var checkRole = async function CheckRoleAuth (req, res, next) {
try {
const token = req.headers.authorization.split(' ')[1];
const decodedToken = jwt.verify(token, envs.jwtSecret);
await User.findById(decodedToken.userId)
.then(foundUser => {
if (foundUser) {
if (foundUser.role != null || foundUser.role != '') {
if (foundUser.role.includes('Admin'))
{
req.userData = {
email: decodedToken.email,
id: decodedToken.id
};
next();
} else {
return res.sendStatus(401);
}
} else {
return res.sendStatus(401);
}
}
})
.catch(err => {
return res.sendStatus(401);
});
} catch (error) {
return res.sendStatus(401);
}
}
1条答案
按热度按时间sdnqo3pr1#
您在
checkRole
中间件中将async/await
与then/catch
组合在一起,因此可能checkRole
中间件和端点处理程序都试图发回响应。像这样重构
checkRole
中间件: