Express:将res.json作为参数传递时出错

时间:2014-05-04 18:29:46

标签: javascript node.js express scope

我有这样的事情:

...
var someService = function(next) {
    var result = {"some": "json"};
    next(result);
};

app.get('/someRoute', function (req, res) {
    someService(function (result) {
        res.json(result);
    });
});
...

我想更改get to this:

app.get('/someRoute', function (req, res) {
    someService(res.json);
});

但它给了我:

  

TypeError:无法调用方法' get'在res.json中未定义   某个服务中的(... / node_modules / express / lib / response.js:185:22)

我猜这个问题与范围有关。它是什么?

1 个答案:

答案 0 :(得分:4)

问题似乎是Javascript中的方法范围在语法上是绑定的。

在res.json方法中,它引用this。当调用res.json(/* some arg */)时,this评估为res。当您将res.json作为回调传递时,someService(res.json);this不再绑定到res

您可以将someService(res.json.bind(res));显式绑定到this,将其更改为res以获得所需结果。

MDN文章:

this

Function.prototype.bind