我对node.js(以及整体编程)很陌生,并且在开发我的快速应用程序时遇到了错误。完整的错误消息是
(节点:12896)UnhandledPromiseRejectionWarning:错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头 在ServerResponse.setHeader(_http_outgoing.js:485:11) 在ServerResponse.header(C:\ Viktor Filer \ Matkort1.1 \ node_modules \ express \ lib \ response.js:771:10) 在ServerResponse.send(C:\ Viktor Filer \ Matkort1.1 \ node_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_modules \ regenerator-runtime \ runtime.js:45:40) 在Generator.invoke [作为_invoke](C:\ Viktor Filer \ Matkort1.1 \ node_modules \ regenerator-runtime \ runtime.js:271:22) 在Generator.prototype中。 [下一个](C:\ Viktor Filer \ Matkort1.1 \ node_modules \ regenerator-runtime \ runtime.js:97:21) 在asyncGeneratorStep(C:\ Viktor Filer \ Matkort1.1 \ src \ routes \ admin.js:11:103) 在_next(C:\ Viktor Filer \ Matkort1.1 \ src \ routes \ admin.js:13:194) (节点:12896)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。该错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是由于拒绝了未经.catch()处理的诺言而引起的。 (拒绝ID:1) (节点:12896)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。
我的代码如下:
router.post("/addRestaurant", async(req, res) => {
if (req.body.password && req.body.username && req.body.name) {
if (await models.RestaurantAccount.findOne({
username: req.body.username
}) || await models.Restaurant.findOne({
name: req.body.name
})) {
return res.send("Information sent is already in use");
} else {
let restaurant = models.Restaurant({
name: req.body.name,
})
restaurant.save();
let password = await argon2.hash(req.body.password);
let restaurantAcc = models.RestaurantAccount({
username: req.body.username,
password: password,
restaurant: restaurant._id,
})
restaurantAcc.save();
return res.send("Restaurant added succesfully");
}
} else {
return res.send("Insuficient information")
}
})
这不是应用程序的全部代码,但是我很确定该错误存在于 这段代码。我尝试对此问题进行一些研究,但没有发现任何可以完全帮助我理解如何解决此错误的东西。
如果在我使用has函数之前删除await关键字(argon2),则不会显示此错误,但其他 因为我试图在完成散列之前保存密码而出现错误
关于如何解决此问题的任何建议?