Node.js NodeJS,承诺期间如何发送响应。然后呢?
我有以下代码:Node.js NodeJS,承诺期间如何发送响应。然后呢?,node.js,promise,response,Node.js,Promise,Response,我有以下代码: User.getConfByID(userID) .then((item)=>{ if(item.length == 0){ res.status(400).json({error:"NO_USER_FOUND"}) }else{ if(item[0].token == token){ if((Math.abs(Date.now() - item[0].c
User.getConfByID(userID)
.then((item)=>{
if(item.length == 0){
res.status(400).json({error:"NO_USER_FOUND"})
}else{
if(item[0].token == token){
if((Math.abs(Date.now() - item[0].conf_iat)) > tokenValid){
res.status(401).json({error: "TOKEN_INVALID"})
}else{
return mariaDBTemplates.updateOneRowTemplate("User_confirmation", {confirmed:1}, "user_id", userID)
}
}else{
res.status(401).json({error: "TOKEN_NOT_SAME"})
}
}
})
.then(()=>{
res.status(200).json({success: "CONFIRMED"})
})
.catch((err)=>{
res.status(500).json({error: err.message})
})
你看,我有不同类型的错误消息和不同类型的状态代码。当我运行此代码时,它总是给我以下警告:
Error: Can't set headers after they are sent
我想这是因为我在发送回复后没有违背承诺,对吗?。但我怎么才能解决这个问题呢?有什么建议吗
干杯你的问题在于你的承诺链。在第一个。然后,您总是使用res设置响应,但在下一个。然后在链中尝试再次设置响应。请注意,不从承诺返回任何内容与返回承诺相同。resolveundefined 我会这样做:
User.getConfByID(userID)
.then((item) => {
if(item.length == 0)
return { statusCode: 400, body: { error: "NO_USER_FOUND" } };
else {
if(item[0].token == token) {
if((Math.abs(Date.now() - item[0].conf_iat)) > tokenValid)
return { statusCode: 401, body: { error: "TOKEN_INVALID" } };
else {
//not sure what this returns, but it looks like this is
//what you're trying to return the 200 for
mariaDBTemplates.updateOneRowTemplate("User_confirmation", { confirmed: 1 }, "user_id", userID);
return { statusCode: 200, body: { success: "CONFIRMED" } };
}
} else
return { statusCode: 401, body: { error: "TOKEN_NOT_SAME" } };
}
})
.then((result) => {
res.status(result.statusCode).json(result.body);
})
.catch((err) => {
res.status(500).json({ error: err.message });
});
还要注意,从承诺返回值与返回承诺相同。resolvevalue;,并将延续承诺链 尝试返回res.status4xx调用中的每一个res.status4xx调用没有仍然相同的警告:/似乎您在代码流中设置了res两次谢谢:如果我有另一个。那么在.thensresult之前呢?这很好,只需确保将结果传递给下一个承诺:.thenresult=>{…;return result;}