簡體   English   中英

ExpressJS:錯誤:發送標頭后無法設置。

[英]ExpressJS: Error: Can't set headers after they are sent.

我正在嘗試向我的ExpressJS應用程序添加一個驗證方法,但是它似乎不太可行...我目前可以更改用戶名,但是,如果它具有空字符串,則該應用程序會崩潰,盡管它應該發送一個錯誤。 有什么建議么?

var validatePresenceOf = function(val, func) {
    if (typeof val === 'undefined' || val.length < 1) {
        res.json({
            errors: {
                userName: "Your name can't be blank"
            }
        });
    } else {
        return func;
    }
};

validatePresenceOf(req.body.userName, User.findByIdAndUpdate( currentUser._id, {
    local: {
        name                : req.body.userName
    }
}, function (err, user) {

    if (err) throw err;

    res.json({
        user : user
    });
}));

Express調用setHeader方法兩次時給出錯誤。 驗證方法給出錯誤時,也許您忘記了或沒有使用“返回”! 請檢查一下。 我相信快遞驗證器對您來說是更好的解決方案

您不應在驗證檢查之前立即調用User.findByIdAndUpdate()

這可以暫時解決您的問題:

var validatePresenceOf = function(val, func) {
    if (typeof val === 'undefined' || val.length < 1) {
        res.json({
            errors: {
                userName: "Your name can't be blank"
            }
        });
    } else {
        func();
    }
};

validatePresenceOf(req.body.userName, function() {
    User.findByIdAndUpdate( currentUser._id, {
        local: {
            name: req.body.userName
        }
    }, function (err, user) {

        if (err) throw err;

        res.json({
            user : user
        });
    });
});

但是,我建議使用express-validator作為請求驗證的最佳實踐。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM