node.js无法使用res.json设置标头错误

时间:2016-03-11 00:47:55

标签: javascript node.js

if (user) {

    if (userId != user._id) {
        res.json({success: false, msg: 'Invalid request, wrong secret key'});
    }

    User.comparePassword(password, user.password, function (err, result) {
        if (result === true) {

            res.json({success: true, msg: 'ok'});
        } else {
            res.json({success: false, msg: 'Error, Incorrect password!'});
        }
    });
} else {
    res.json({ success: false, msg: 'Error, account not exist!'});
}

我认为第一个res.json会停止以下res.json但是在这种情况下我似乎无法使用第一个res.json,我不知道为什么。

1 个答案:

答案 0 :(得分:0)

res.json()发送响应,但不会阻止其余代码运行。

因此,您有一些尝试发送res.json()两次的代码路径,这将导致您看到的错误消息。您需要使用适当的if/then块或插入适当的return语句来阻止这种情况。

我建议:

if (user) {

    if (userId != user._id) {
        res.json({success: false, msg: 'Invalid request, wrong secret key'});
        return;
    }

    User.comparePassword(password, user.password, function (err, result) {
        if (result === true) {

            res.json({success: true, msg: 'ok'});
        } else {
            res.json({success: false, msg: 'Error, Incorrect password!'});
        }
    });
} else {
    res.json({ success: false, msg: 'Error, account not exist!'});
}

但是,您也可以通过向第一个else添加if并将其余代码放入其中来解决此问题。