Mongoose和Node.js的JavaScript范围问题

时间:2014-03-28 22:01:29

标签: javascript node.js mongoose

我在这里使用Node,以下函数被用作控制器动作。我正在使用Mongoose访问模型并且在Game.findById()的范围内,我无法访问它上面的任何变量,即this.player和this.gameId。

有谁知道我做错了什么?请注意,我想访问console.log()语句所在的变量,但我无法访问它。 this.player返回undefined。在此先感谢您的帮助。

exports.cleanup = function(req, res) {
  this.player = req.body;
  this.gameId = req.url.split('/')[2];
  debugger;
  Game.findById(this.gameId, function(err, game) {
    if (err) return err;
    console.log(this.player);
  });
}; 

1 个答案:

答案 0 :(得分:0)

this指的是两个函数内部的不同内容,每个函数都有自己的范围和自己的this(尽管在某些情况下this可能未定义,请参阅一对以下参考文献)。

您想要的是以下内容 - 请注意self变量。

exports.cleanup = function(req, res) {
  this.player = req.body;
  this.gameId = req.url.split('/')[2];
  var self=this;
  debugger;
  Game.findById(this.gameId, function(err, game) {
    if (err) return err;
    console.log(self.player);
  });
}; 

可能有助于理解this的一些资源: