我希望我能为这个问题提供足够的信息,但是我不明白为什么当我有意捕获错误时,为什么我的回调函数返回未处理的承诺拒绝:

(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/

10-09 06:48