2017-05-26 4 views
0

Je suis assez nouveau pour nodejs. Écrire ma première application Je suis assez habitué à PHP.Utilisation du module dans le module dans NodeJS

Afin de garder le code organisé et propre, j'écris toujours des fonctions dans des fichiers séparés et les inclue comme requis dans PHP.

Cependant, dans nodejs j'ai dû les exiger comme si j'avais besoin d'un module. Par exemple.

functions.js

module.exports = { 
check_db : function(key){ 

}, 

check_cache : function(key){ 
    memcached.get(key,function(err, data){ 
     console.log(data); 
    }); 
}, 

};

inclus que dans l'application principale comme si

// Establish connection with cache and database 
const mysql = require('mysql2'); 
const Memcached = require('memcached'); 
const memcached = new Memcached('localhost:11211'); 
const bb = require('bot-brother'); 

//Load the database cache functions 
const dbc = require("./functions"); 
dbc.check_cache(123); 

Maintenant, je peux accéder aux fonctions de DBC à partir du fichier de l'application principale, mais je ne peux pas utiliser des modules qui ont été nécessaires à l'application principale du fichier fonctions . Je reçois une erreur indiquant que memcached n'est pas défini.

Comment puis-je résoudre ce problème?

+0

double possible de (https [Node.js "exige" la fonction et les paramètres] : //stackoverflow.com/questions/7367850/node-js-require-function-and-parameters) –

Répondre

0

Solution simple, vous pouvez require("memcached") dans le fichier functions.js et créer le serveur ici. Mais je ne voudrais pas aller avec cette solution, car, si vous avez besoin de memcache ailleurs, vous auriez ouvert de nombreuses connexions sur le serveur memcache.

Un autre, et plus propre solution IMO, est injecter la dépendance memcache dans vos services (ou functions comme vous les appelez). (Cette pratique est appelée injection de dépendance si vous voulez en apprendre davantage à ce sujet et quels sont les avantages de celui-ci)

Voici comment cela fonctionnerait:

  • vous toujours créer la connexion memcache dans la principale fichier ;
  • au lieu d'exporter un objet JSON brut dans votre functions.js, vous exportez une fonction qui prend un argument (ici memcache)
  • dans votre fichier principal, vous avez besoin de cette fonction et d'appeler pour obtenir le service que vous voulez.

Voici ce que le code ressemblerait à ceci:

main.js

//Load the database cache functions 
const dbcFactory = require("./functions"); 
const dbc = dbcFactory(memcached) 

functions.js

module.exports = function (memcached) { 
    return { 
    check_db : function(key){}, 

    check_cache : function(key){ 
     memcached.get(key,function(err, data){ 
     console.log(data); 
     }) 
    } 
}; 
+0

Injection de dépendance un peu sale à long terme où vous pourriez avoir à transmettre de plus en plus de dépendances? –

+0

Les principaux avantages de DI (injection de dépendances) sont que ** tout est explicite ** et que chaque service que vous avez est facilement testable (vous pouvez injecter des dépendances simulées dans le test env).Je dirais que si votre code est en désordre avec DI, cela révèle que votre architecture générale est un problème et vous devrez peut-être repenser certaines parties :) – atomrc

+0

Il vous faut écrire un peu plus de code, c'est vrai, mais explicite va certainement changer la façon dont votre code est lisible et compréhensible – atomrc