2015-05-12 17 views
1

Я пытаюсь создать свой первый модуль NodeJS. Это то, что я делаю:NodeJS - экспорт нескольких функций

var text = function(){ 
    this.padRight = function(width, string, padding){ 
     return (width <= string.length) ? string : this.padRight(width, string + padding, padding); 
    }; 
    this.cleanText = function(text){ 
     if (typeof text !== 'undefined') { 
      return text.replace(/(\r\n|\n|\r)/gm,""); 
     } 
     return null; 
    }; 
    this.printOut = function(outputObj){ 
     var module = this, 
      output = ""; 

     outputObj.forEach(function(obj){ 
      switch(obj.type){ 
       case "date" : 
        var date = obj.contents; 
        if(typeof date != "undefined") output += date.toString().substring(4, 25) + "\t"; 
        break; 
       case "string": 
        var string = obj.contents; 
        if(typeof string != "undefined"){ 
         string = module.cleanText(string); 
         if(typeof obj.substring != "undefined" && obj.substring != 0) { 
          string = string.substring(0, obj.substring); 
         } 
         if(typeof obj.padRight != "undefined" && obj.padRight != 0) { 
          string = module.padRight(15, string, " "); 
         } 
         output += string + "\t"; 
        } 
        break; 
      } 
     }); 
     console.log(output); 
    }; 
}; 

module.exports.text = text; 

Я пытаюсь иметь различный вид помощников, поэтому я хочу, чтобы иметь возможность вызвать этот модуль так:

require("helpers");  
helpers.text.printOut(); 

Но я получаю ошибка.

Как экспортировать различные функции в один и тот же модуль и вызывать их отдельно?

Благодаря

ответ

1

Проблема заключается в том text функция самого по себе, она смотрит на меня, как вы хотите быть экспортированием экземпляра из text, а не самой функции, т.е.

module.exports.text = new text(); 
1

Вашего кода несколько запутанно, поскольку вы определяете функцию-конструктор, которую вы экспортируете (как указал Джеймс). Это запутанно, потому что в JS принято писать конструкторы с капиталом.

Я бы предложил другое решение, кроме Джеймса, которое не должно экспортировать новый Text(), но для экспорта самого конструктора. В модуле, где вам нужен этот объект, импортируйте этот модуль как var Text = require('./text'); и выполните новую часть Text(). Экспорт нового Text() имеет в качестве недостатка, что вы эффективно создали синглтон, и это может быть или не быть вашим намерением. Имейте в виду, что require() на модуле эффективно выполняется только один раз, а когда другой модуль загружает модуль, описанный выше, это тот же объект.

Смежные вопросы