2016-09-19 3 views
0

Ich bin ein Amateur Nodejs Entwickler. Ich habe tiefe Probleme mit Javascript-Modulen und benötige Module aus anderen Modulen. Hier ist das Szenario, mit dem ich Hilfe brauche.erfordern ein Modul aus einem anderen Modul Fehler

Können sagen, ich API-Definitionen in einer Datei wie so (userApi) haben:

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; 
} 

ein Helfer-Modul wie so (userFunctions.js)

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

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

einem anderen Helfer Modul wie so (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; 
} 

Wie Sie sehen können, sind alle meine Helfer und APIs innerhalb von Modulen. Ich setze Klammern auch am Ende der require-Anweisungen. Möglicherweise stellen Sie auch fest, dass paymentFunctions userFunctions erfordert und umgekehrt. Während meiner Zeit mit dem Knoten muss ich noch die verschiedenen Fehler herausfinden, die mit diesem Muster einhergehen. Heute sehe ich den "Require ist kein Funktionsfehler". Hinweis: Es funktionierte und funktionierte plötzlich nicht mehr, als ich mein Webstorm-Projekt indizierte. Davon abgesehen habe ich viele ähnliche Fehler in der Vergangenheit mit Require-Anweisungen und JS-Modulen. Daher ist es ein eher systemisches Problem, das ich in meinem Gehirn lösen muss.

Antwort

0

Nun, ich denke, das Geheimnis ist zu verstehen, wie module.exports funktioniert. Zuerst müssen Sie ein exportierbares Objekt erstellen und dann seine Eigenschaften und Methoden festlegen.

Etwas wie:

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) 
     }); 
    } 
}; 

In diesem Fall, was ich ein Objekt erstellt (eigentlich eine „Javascript Klasse“) und exportierte sie als Modul. Dann kann ich es und seine Methoden an anderen Stellen des Codes anfordern, da diese Eigenschaften auf das exportierbare Objekt gesetzt sind (this.prop = ...).

+0

http://stackoverflow.com/questions/30576454/how-to-make-webstorm-resolve-modules-which-are-functions –

+0

Danke für die Hilfe. Stellt sich heraus, dass es ein Problem mit Webstorm ist. Ich habe meiner IDE zu sehr für diese eine vertraut. –

Verwandte Themen