требовать модуль из ошибок другого модуля

Я любитель nodejs-разработчик. У меня серьезные проблемы с модулями javascript, и мне требуются модули внутри других модулей. Вот сценарий, с которым мне нужна помощь.

Допустим, у меня есть определения API в одном файле, например (userApi):

var userFunctions = require('./userFunctions.js')()

module.exports = function(){

module.getUser = function(req.res){
    userFunctions.getUser(req.id, function(err,user){
      if(err) return res(err)
      return res(null,user)
    })
}

return module;
}

такой вспомогательный модуль (userFunctions.js)

var paymentFunctions = require('../payment/paymentFunctions.js')()

module.exports = function(){
module.getUser = function(id,res){
//logic
}
return module;
}

другой вспомогательный модуль, подобный этому (paymentFunctions.js)

var userFunctions = require('../user/userFunctions.js')()

module.exports = function(){
  module.makePayment = function(req,res){
    userFunctions.getUser(req.id, function(err){
      if(err) return res(err)
      return res(null)
    })
  }
return module;
}

Как видите, все мои помощники и API находятся внутри модулей. Я также ставлю круглые скобки в конце операторов require. Вы также можете заметить, что для paymentFunctions требуются userFunctions и наоборот. За время работы с узлом мне еще предстоит выяснить различные ошибки, связанные с этим шаблоном. Сегодня я вижу, что «требуется не ошибка функции». Примечание. Он работал и внезапно перестал работать, когда я переиндексировал свой проект webstorm. При этом у меня было много подобных ошибок в прошлом с операторами require и модулями JS. Поэтому это более системная проблема, которую мне нужно решить в своем мозгу.


person Community    schedule 19.09.2016    source источник


Ответы (1)


Что ж, думаю, секрет в том, чтобы понять, как работает module.exports. Сначала вам нужно создать «экспортируемый» объект, а затем установить его свойства и методы.

Что-то вроде:

var userFunctions = require('./userFunctions.js');
//Lets say this is your userApi class
module.exports = function () {
    this.getUser = function (req, res) {
        userFunctions.getUser(req.id, function (err, user) {
            if (err) return res(err)
            return res(null, user)
        });
    }
};

В этом случае я создал объект (фактически «класс Javascript») и экспортировал его как модуль. Затем я могу потребовать его и его методы в других местах кода, поскольку эти свойства устанавливаются для экспортируемого объекта (this.prop = ...).

person Luiz Fernando da Silva    schedule 19.09.2016
comment
comment
Спасибо за помощь. Оказывается, это проблема с веб-штормом. Я слишком доверял своей IDE для этого. - person ; 20.09.2016