我希望我能为这个问题提供足够的信息,但是我不明白为什么当我有意捕获错误时,为什么我的回调函数返回未处理的承诺拒绝:
(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()
的方式有关,但是看不到如何处理。你能帮忙吗? 最佳答案
事实证明,我是个白痴,忘记了我不小心将整个函数放在了回调中。回调然后执行两次,并因此返回错误:发送标头后无法设置标头。
关于javascript - Express.js中的UnhandledPromiseRejection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42515083/