【问题标题】:nodejs require is not loading object globallynodejs require 没有全局加载对象
【发布时间】:2014-12-30 03:34:09
【问题描述】:

helpers 文件夹中有两个文件,一个是EventHelper.jsUserEvent.js

helpers/EventHelper.js

function EventHelper() {
  this.onEventCreated = function(err, e) {...}
  this.isExisting = function(id) {...}
}
module.exports = new EventHelper();

helpers/UserEvent.js

var EventHelper1 = require('./EventHelper')
var EventHelper2 = require('./EventHelper.js')

function UserEvent() {
  this.fireEvent = function(req, res) {
    var EventHelper3 = require('./EventHelper');
    ...
    EventHelper1.onEventCreated(err, e);
    EventHelper2.onEventCreated(err, e);
    EventHepler3.onEventCreated(err, e);
  }
};
module.exports = new UserEvent();

控制器/EventController.js

 var EventHelper = require('../helpers/EventHelper')
    var UserEvent = require('../helpers/UserEvent');

    var EventController = {
      fireEvent: function(req, res) {
        if(EventHelper.isExisting(req.params.id)) UserEvent.fireEvent(req, res)
        ...
      }
    }

EventHelper1UserEvent.js 中的EventHelper2 始终为空(具有{}),其中EventHelper3 正在正确初始化并且能够正确引用对象的方法。我已经在全球不同的控制器文件夹(EventController.js)中引用了这个EventHelper.js,并且它被正确填充。我不确定我是否在这里遗漏了什么

【问题讨论】:

  • 这是你的全部代码吗?如果EventHelper.js 在某处需要UserEvent.js,这就是我希望看到的。
  • 你使用的是console.log(EventHelper1),当你看到{} 时?如果是这样,我知道问题所在:)
  • 我希望你知道你总是得到你的 EventHelper 的 同一个实例。模块只执行一次
  • @m59,是的,我正在检查EventHelper1EventHelper2console.log(EventHelper1),结果是{},当然如果我参考EventHelper.onEventCreated(),我收到错误Cannot call method 'onEventCreated' of undefined
  • 嗯,这个问题对我来说并不是很明显。我在想问题是您正在记录一个对象,该对象的原型上具有属性,这些属性不会显示在日志中,但实际上可以正常工作。

标签: javascript node.js require


【解决方案1】:

您缺少一些分号:

function EventHelper() {
   this.onEventCreated = function(err, e) {...}
   this.isExisting = function(id) {...}
}**;**
module.exports = new EventHelper();

例如,在添加了这个之后,我在你的 Controller 中得到了 EventHelper,这是我以前没有得到的。

此外(我想这只是和错字在这里而不是在您的实际代码中,因为那时您无法获得它的实例),它是:

EventHelper3.onEventCreated(err,e);

而不是`

EventHepler3.onEventCreated(err,e);

总而言之,以下内容现在对我有用:

// EventHelper.js
function EventHelper() {
   this.onEventCreated = function(err, e) {
      console.log('testCreate');
   };
   this.isExisting = function(id) {
      console.log('testExists' + id);
      return true;
   };
};  
module.exports = new EventHelper();

// UserEvent.js
var EventHelper1 = require('./EventHelper.js');
var EventHelper2 = require('./EventHelper.js');


function UserEvent() {
   this.fireEvent = function(req, res) {
      console.log(req + res);
      var EventHelper3 = require('./EventHelper');
      EventHelper1.onEventCreated(req, res);
      EventHelper2.onEventCreated(req, res);
      EventHelper3.onEventCreated(req, res);
   };
};
module.exports = new UserEvent();

// EventController.js
var EventHelper = require('../helpers/EventHelper.js');
var UserEvent = require('../helpers/UserEvent.js');

var EventController = {
   fireEvent: function(req, res) {
      if(EventHelper.isExisting(1)) UserEvent.fireEvent(req, res);
   };
 }

 EventController.fireEvent("1","2");

使用以下输出:

testExists1
12
testCreate
testCreate
testCreate

希望能帮到你!

【讨论】:

  • 在实际代码中,我到处都有适当的分号。如果有问题,我认为EventHelper 不应该填充到EventController 中。它在EventController 中填充,而不在UserEvent 中填充。
  • 实际上在我的机器上。看看输出。我收到了三次“testCreate”,因此为三个 EventHelper 对象中的每一个都调用了 .onEventCreated。因此,它们被填充。这很奇怪,所以它不适合你?
猜你喜欢
  • 2014-12-17
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
相关资源
最近更新 更多