ExpressJS:错误:发送后无法设置标头。

时间:2014-07-19 01:59:17

标签: javascript node.js express

我正在尝试向我的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
    });
}));

2 个答案:

答案 0 :(得分:0)

当setHeader方法调用两次时,

Express会出错。当验证方法给出错误时,您可能忘记了或者没有使用“返回”!请检查一下。我相信express validator是更好的解决方案

答案 1 :(得分:0)

在验证检查之前,不应立即致电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作为请求验证的最佳做法。