Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js res.json搞砸了_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript node.js res.json搞砸了

Javascript node.js res.json搞砸了,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,首先,我发出一个'/init'请求,响应是{“x”:50}, 然后我发出一个'/user'请求,响应是{“x”:50,“data”:“jack”}。到目前为止没有问题,但是如果我再次发出init请求,它会再次发出{“x”:50,“data”:“jack”}响应,这怎么可能呢 var resp.success = {"x":50} exports.init = function (req, res) { res.json(resp.success) };

首先,我发出一个'/init'请求,响应是
{“x”:50}
, 然后我发出一个'/user'请求,响应是
{“x”:50,“data”:“jack”}
。到目前为止没有问题,但是如果我再次发出init请求,它会再次发出
{“x”:50,“data”:“jack”}
响应,这怎么可能呢

    var resp.success = {"x":50} 

    exports.init = function (req, res) {
        res.json(resp.success)
    };

    exports.user = function (req, res) {
        User.findOne({_id: "1234"}).exec(function (err, user) {
            var response = resp.success;
            response.data = user.name;
            res.json(response);
        });
    };

因为您已经在@init和@user方法之外的作用域中定义了var resp.success={“x”:50},所以当您从这些方法中修改/读取resp.success时,它们正在访问resp.success的单个共享对象实例。您可以通过在@init方法和@user中独立定义resp.success来解决此问题:

exports.init = function (req, res) { 
    var resp.success = {"x":50} 
    res.json(resp.success)
};

exports.user = function (req, res) {
    var resp.success = {"x":50} 
    User.findOne({_id: "1234"}).exec(function (err, user) {
        var response = resp.success;
        response.data = user.name;
        res.json(response);
    });
};
如果使用下划线JS库,还可以执行以下操作:

var resp.success = {"x":50} 
exports.init = function (req, res) { 
    var successResponseForThisRequest = _.clone(res.success);
    res.json(resp.success)
};

exports.user = function (req, res) {
    User.findOne({_id: "1234"}).exec(function (err, user) {
        var successResponseForThisRequest = _.clone(res.success);
        response.data = user.name;
        res.json(response);
    });
};

var response=resp.success
不会生成resp.success的新副本,只是对原始响应的新引用,因此在修改响应时,也会修改原始响应。您需要克隆成功消息。