繁体   English   中英

Express.js中的UnhandledPromiseRejection

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM