node.js - expressjs 在模块中修改/添加对象属性

标签 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(第二种情况)。

出了什么问题?

谢谢!

最佳答案

试试这个代码:

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 未定义,并且您在尝试访问 undefined object 的 foo 属性时收到错误。

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

关于node.js - expressjs 在模块中修改/添加对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37574113/

相关文章:

javascript - Node js fs 模块说对象没有方法appendFile

node.js - Twilio - 未处理来电(快速入门)

node.js - Node redis zadd键错误

node.js - Sequelize 嵌套包含的 Where 条件

node.js - nodejs、socket.io 和expressjs 未连接

javascript - Node.js:如何用 C++ 创建 ES6 模块

javascript - 如何通过 npm 安装 CloudKit JS 库

node.js - Express/NodeJS : stderr: Error: request entity too large

javascript - 如何在 NodeJS/ExpressJS/Passport 中显示登录的用户名?

javascript - 安装模块与使用其 url 包含模块之间的主要区别是什么?