从Node.js公开方法的最佳方法是什么?

时间:2013-01-25 06:44:31

标签: node.js module

考虑我想公开一个名为Print

的方法
  1. 绑定方法为prototype
  2. 文件另存为Printer.js

    var printerObj = function(isPrinted) {
                this.printed = isPrinted;        
        }
    
    printerObj.prototype.printNow = function(printData) {
            console.log('= Print Started =');
    };
    module.exports = printerObj;
    

    然后通过将代码printNow()放入任何外部.js节点程序文件来访问require('Printer.js').printNow()

    1. 使用module.exports导出方法本身:
    2. 文件另存为Printer2.js

      var printed = false;   
      function printNow() {
      console.log('= Print Started =');
      }    
      module.exports.printNow = printNow;
      

      然后通过将代码printNow()放入任何外部.js节点程序文件来访问require('Printer2.js').printNow()

      任何人都能说出与Node.js有什么区别和最佳方式吗?

2 个答案:

答案 0 :(得分:4)

绝对是第一种方式。它被称为substack pattern,你可以在Twitter和Mikeal Rogers'blog上阅读。可以在解析器中的jade github repo找到一些代码示例:

var Parser = exports = module.exports = function Parser(str, filename, options){
  this.input = str;
  this.lexer = new Lexer(str, options);
  ...
};

Parser.prototype = {

  context: function(parser){
    if (parser) {
      this.contexts.push(parser);
    } else {
      return this.contexts.pop();
    }
  },

  advance: function(){
    return this.lexer.advance();
  }
};

答案 1 :(得分:3)

在第一个示例中,您正在创建一个类,理想情况下,您应该在调用者程序中使用“new”:

var PrinterObj = require('Printer.js').PrinterObj;
var printer = new PrinterObj();
printer.PrintNow();

这是关于这个主题的好读物:http://www.2ality.com/2012/01/js-inheritance-by-example.html

在第二个例子中,您将返回一个函数。

不同之处在于,您可以拥有第一个示例的多个实例(假设您使用了新的指示),但只有第二个方法的一个实例。