[英]UnhandledPromiseRejection in Express.js
我希望我能为这个问题提供足够的信息,但是我不明白为什么当我有意捕获错误时,为什么我的回调函数返回未处理的承诺拒绝:
(node:3144) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Can't set headers after they are sent.
(node:3144) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我在路由中在这里调用该函数:
router.route("/home/create")
.post(Authorization, function(req, res) {
CreateSnippetResource(req, function(err) {
if (err) {
console.log(err.message)
}
res.redirect("/home")
});
});
和“ CreateSnippetResource”功能:
(function() {
let User = require("../../Models/User");
let Snippet = require("../../Models/Snippet");
/**
* Create a new snippet and save it to database
* @param request
* @param callback
*/
module.exports = function(request, callback) {
callback(
User.findOne({ user: request.session.Auth.username }, function(err, user) {
if (err || user === null) {
callback("User not found")
}
var snippet = new Snippet({
title: request.body.snippetName.split(".").shift(),
fileName: "." + request.body.snippetName.split(".").pop(),
postedBy: user._id,
snippet: [{
text: " "
}]
});
snippet.save().then().catch(function(err) {
callback(err)
});
}))
};
}());
当标题未输入时,我正在尝试处理错误。 我的架构模块中有一个验证器,如下所示:
SnippetSchema.path("title").validate(function(title) {
return title.length > 0;
}, "The title is empty");
实际上,从回调CreateSnippetResource
返回的错误消息是The title is empty
。 那么我怎么会得到这个Promise错误呢?
我假设它与我如何处理snippet.save()
,但是看不到如何处理。 你能帮忙吗?
事实证明,我是个白痴,忘记了我不小心将整个函数放在了回调中。 回调然后执行两次,并因此返回错误:发送标头后无法设置标头。
当我故意要捕获错误时,为什么我的回调函数返回
Unhandled Promise Rejection
?
当您的callback
引发另一个异常时,就会发生这种情况。 这将拒绝.catch(…)
调用返回的承诺,并且拒绝在任何地方都无法处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.