【问题标题】:node.js modules pass object to singletonnode.js 模块将对象传递给单例
【发布时间】:2012-04-03 17:15:24
【问题描述】:

我在 node.js 中使用了一个类,我想在需要时将各种对象传递给它。

课程如下:

    var ItemHandler = (function() {

          var items = new Array();

          return { 
            start: function (item, callback) {

                items.push(item);
                ItemHandler.timer();

            },
            timer: function () {

                var timer = setTimeout(function() {

                    console.log('test');
                    ItemHandler.timer();

                }, 1000);
            }
          };
        })();

module.exports = ItemHandler;

这是在我的一个路由 index.js 中调用的。像这样:

var itemHandler = require('./lib/item.handler.js');
itemHandler.start(items);

我想做的是将路线中使用的其他对象传递给这个文件。类似这样:

var itemHandler = require('./lib/item.handler.js')(socket)(res);

在这里,我将传入套接字对象(从 socket.io 连接和响应返回)。

我将如何构建我的类以接受这两个参数?

非常感谢!

【问题讨论】:

  • 您的 ItemHandler 类需要这些参数来做什么?这可能会极大地影响解决方案。

标签: javascript node.js express


【解决方案1】:
function ItemHandler(param) {
  var items = new Array();

  ItemHandler.start = function (item, callback) {
    items.push(item);
    ItemHandler.timer();
  };

  ItemHandler.timer = function () {
    var timer = setTimeout(function() {
      console.log('test');
      ItemHandler.timer();
    }, 1000);
  }

  return ItemHandler;
};

module.exports = ItemHandler;

ItemHandler 现在是一个函数,所以...

var itemHandler = require('./lib/item.handler.js')(socket)(res);
itemHandler.start(items);

或者:

var itemHandler = require('./lib/item.handler.js');
itemHandler(socket)(res).start(items);

希望它有效,还没有测试过:)

【讨论】:

  • 谢谢,还没有测试过,但这会消除类的“单例”性质,对吧?虽然,我认为我上面的实现似乎也不是一个真正的单例,它让 setTimeout 堆积起来,它运行的次数越多。
  • 是的,我想我的方法不是单例,因为您可以调用new 并获得一个新对象...但是您为什么要这样做:)。然而,它是你的(技术上),但确实计时器会堆积起来。您可以轻松地调整它...只需在第一次调用 timer() 时初始化一些布尔值。
猜你喜欢
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 2020-04-26
  • 2016-11-15
相关资源
最近更新 更多