Javascript (节点:3236)未经处理的PromisejectionWarning:错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置头

Javascript (节点:3236)未经处理的PromisejectionWarning:错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置头,javascript,node.js,express,Javascript,Node.js,Express,我对node.js(以及整个编程)非常陌生,在开发express应用程序时遇到了一个错误。完整的错误消息是 (节点:12896)未经处理的PromisejectionWarning:错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置头 在ServerResponse.setHeader(_http_outgoing.js:485:11) 在ServerResponse.header(C:\Viktor Filer\Matkort1.1\node\u modules\exp

我对node.js(以及整个编程)非常陌生,在开发express应用程序时遇到了一个错误。完整的错误消息是

(节点:12896)未经处理的PromisejectionWarning:错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置头 在ServerResponse.setHeader(_http_outgoing.js:485:11) 在ServerResponse.header(C:\Viktor Filer\Matkort1.1\node\u modules\express\lib\response.js:771:10) 在ServerResponse.send(C:\Viktor Filer\Matkort1.1\node\u modules\express\lib\response.js:170:12) 在_callee$(C:\Viktor Filer\Matkort1.1\src\routes/admin.js:39:24) 在tryCatch(C:\Viktor Filer\Matkort1.1\node\u modules\registrator runtime\runtime.js:45:40) 在Generator.invoke[as _invoke](C:\Viktor Filer\Matkort1.1\node_modules\registrator runtime\runtime.js:271:22) 在发电机上。原型。[作为下一步](C:\Viktor Filer\Matkort1.1\node\u modules\registrator runtime\runtime.js:97:21) 在asyncGeneratorStep(C:\Viktor Filer\Matkort1.1\src\routes\admin.js:11:103) 下一站(C:\Viktor Filer\Matkort1.1\src\routes\admin.js:13:194) (节点:12896)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:1) (节点:12896)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程

我的代码是这样的

router.post(“/addRestaurant”),异步(请求、回复)=>{
if(req.body.password&&req.body.username&&req.body.name){
如果(等待models.RestaurantAccount.findOne)({
用户名:req.body.username
})| |等待模特。餐厅。完成({
名称:req.body.name
})) {
return res.send(“发送的信息已在使用”);
}否则{
让餐厅=模特。餐厅({
名称:req.body.name,
})
餐厅。保存();
让password=wait argon2.hash(req.body.password);
让restaurantAcc=models.RestaurantAccount({
用户名:req.body.username,
密码:密码,
餐厅:餐厅,
})
restaurantAcc.save();
return res.send(“餐厅添加成功”);
}
}否则{
return res.send(“信息不足”)
}
})
这不是应用程序的全部代码,但我非常确信错误存在于 这段代码。我尝试过对这个问题做一些研究,但没有发现任何能完全帮助我理解如何解决这个错误的东西

如果在使用has函数(argon2)之前删除wait关键字,则不会显示此错误,但会显示其他错误 错误是因为我试图在散列完成之前保存密码


关于如何解决此问题有什么建议吗?

看起来您的一个异步调用抛出了一个未处理的错误。
models.RestaurantAccount.findOne
是否引发过异常?您还应该在try catch中包装
argon2.hash
。@Jacob谢谢您的建议。虽然我不认为这个问题会出现在models.RestaurantAccount.findOne()中。当我注释掉代码的这一部分时,同样的问题仍然存在。此外,我将argon2包装在哈希函数中,但这并没有消除错误。你还有什么其他建议吗?我刚把这个错误信息发出去。它提到promise没有被多次处理,所以,我假设您的等待之一是抛出一个没有被任何东西捕获的错误。您正在运行哪个版本的节点?你在用巴贝尔吗?@Jacob我在用node的v12.15.0,是的,我在用巴贝尔。我相信问题出在argon2.hash()中,但我不知道如何解决它。我尝试通过使用.then()和.catch()而不是argon2.has()函数来重新构造代码,但仍然存在相同的问题。还有,我刚才忘了提。我得到的响应是一个标题为“error”和“cannotpost/admin/addRestaurant”的HTML文件