Javascript Node.js,Express:发送到客户端后无法设置头
首先,我阅读了所有其他StackOverflow答案和GitHub问题,但似乎没有一个解决了我的问题。使用以下代码(其中一些已弃用,很抱歉代码太脏): 我尝试添加return和next语句,但没有任何效果。 这有助于理解问题: 在之前发送响应,然后再次尝试发送响应时,会发生此错误。为此,您必须检查是否有任何代码发送您的响应两次。有时这是由于nodej的异步行为造成的。有时,一个进程将处于事件循环中,我们发送响应,当它完成执行时,将再次发送响应。因此,您可以使用回调或异步等待来等待执行 PP.S 在遵循答案中给出的代码示例之后,我发现了这个错误(它更类似于现在的链接问题):Javascript Node.js,Express:发送到客户端后无法设置头,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,首先,我阅读了所有其他StackOverflow答案和GitHub问题,但似乎没有一个解决了我的问题。使用以下代码(其中一些已弃用,很抱歉代码太脏): 我尝试添加return和next语句,但没有任何效果。 这有助于理解问题: 在之前发送响应,然后再次尝试发送响应时,会发生此错误。为此,您必须检查是否有任何代码发送您的响应两次。有时这是由于nodej的异步行为造成的。有时,一个进程将处于事件循环中,我们发送响应,当它完成执行时,将再次发送响应。因此,您可以使用回调或异步等待来等待执行 PP.S
当代码多次尝试发送响应时,会发生此错误, 这是你的工作岗位API代码
app.post('/users/:id', verifyToken, function (req, res){
jwt2.verify(req.token, 'secretkey', (err, auth) =>{
if(err){
res.sendStatus(403);
} else {
res.json({
message: 'User created (in theory)',
auth
})
}
})
});
只需从该API中删除额外的响应代码
您必须删除verify token函数中的next()键
function verifyToken(req, res, next){
// Get auth header value
const bearerHeader = req.headers['authorization'];
// Check if bearer is undefined
if(typeof bearerHeader !== 'undefined'){
// Split at the space
const bearer = bearerHeader.split(' ');
// Get token from array
const bearerToken = bearer[1];
// Set the token
req.token = bearerToken;
// Next middleware
next();
}
else{
// Forbidden
res.sendStatus(403);
}
}
在你的app.post('/users/:id'..)中使用此代码更新验证功能
你将发送两次响应。因此,您第二次收到错误,因为响应已经发送
还有一个错误:authData
未定义,因为它将是auth
app.post('/users/:id', verifyToken, function (req, res){
jwt2.verify(req.token, 'secretkey', (err, auth) => {
if(err){
res.sendStatus(403);
} else {
res.json({
message: 'User created (in theory)',
auth
})
}
})
});
修改后仍然崩溃…非常确定VerifyToken函数中出现了错误,但无法确定。仍然给出相同的错误吗?是的,相同的错误现在我获得了身份验证(以前它丢失),并且应用程序没有崩溃,但是我仍然得到了错误。我尝试删除if子句之后的res.json,但没有任何错误avail@SuleymanSah我得到了不同的跟踪,我的代码也不同。我的跟踪中没有SetHeader错误。更新:现在我的跟踪中实际上有一个SetHeader错误,但解决方案仍然与链接问题明显不同。
app.post('/users/:id', verifyToken, function (req, res){
jwt2.verify(req.token, 'secretkey', (err, auth) =>{
if(err){
res.sendStatus(403);
} else {
res.json({
message: 'User created (in theory)',
auth
})
}
})
});
function verifyToken(req, res, next){
// Get auth header value
const bearerHeader = req.headers['authorization'];
// Check if bearer is undefined
if(typeof bearerHeader !== 'undefined'){
// Split at the space
const bearer = bearerHeader.split(' ');
// Get token from array
const bearerToken = bearer[1];
// Set the token
req.token = bearerToken;
// Next middleware
next();
}
else{
// Forbidden
res.sendStatus(403);
}
}
app.post('/users/:id', verifyToken, function (req, res){
jwt2.verify(req.token, 'secretkey', (err, auth) => {
if(err){
res.sendStatus(403);
} else {
res.json({
message: 'User created (in theory)',
auth
})
}
})
});