expressjs修改/添加模块中的对象proprerty

时间:2016-06-01 16:26:54

标签: node.js express module

我在express上创建了这个模块:

module.exports = {
 myobj : {},
 myfun : function(app) {

  app.all('/',function (req, res, next) {
   this.myobj.foo = ‘bar’;
  }
 }
}

但它不起作用,我收到以下错误: 无法设置未定义的属性'foo'

但是,如果我这样做,这很有效,为什么?:

module.exports = {
 myobj : ‘’,
 myfun : function(app) {
 app.all('/',function (req, res, next) {
   this.myobj = ‘bar’;
  }
 }
}

我不明白为什么我不能向我的对象添加属性(第一种情况)但我可以修改我的var myobj(第二种情况)。

怎么了?

谢谢!

1 个答案:

答案 0 :(得分:1)

试试这段代码:

module.exports = {
 myobj : {},
 myfun : function(app) {
  var that = this;
  app.all('/',function (req, res, next) {
   that.myobj.foo = ‘bar’;
  }
 }
}

在第一种情况下:this引用回调函数:function(req, res, next){}而不是您要导出的对象,因为myobj未定义,并且您在尝试访问时遇到错误{{ 1}}未定义对象的属性。

在第二种情况下:您初始化foo回调的新属性myobj,没关系,您可以这样做,但是如果您拨打function(req, res, next) {}然后检查myfun将会看到它仍然是空字符串,这是因为您修改了回调函数属性而不是导出对象。