2012-10-09 3 views
2

J'ai rencontré un problème avec mon application Nodejs. J'ai deux applications différentes qui utilisent la bibliothèque partagée, qui est située de sorte qu'elle se trouve à un niveau supérieur dans node_modules. J'ai donc cette structure ./app1/app.js, ./app2/app.js et ./node_modules/shared.libs/index.js. À son tour a d'autres modules installés, comme mangouste, redis, etc. Plus certains modèles de mogoose avec des fonctions supplémentaires en leur sein. Tous sont exportés de index.js comme ceci:Le module nodejs n'exporte pas la fonction

exports.async = require('async'); 
exports.config = require('./config'); 
exports.utils = require('./lib/utils'); 

Et puis dans les applications je les importer comme ceci:

var libs = require('shared.libs'); 
var config = libs.config; 

Donc, après ce code je peux utiliser config qui vient de cette bibliothèque partagée. Cette partie était et fonctionne très bien. Mais maintenant, j'ai besoin de mettre une couche supplémentaire sur cette bibliothèque (lire: fournir plus d'interface unifiée pour les deux applications). Ce que j'ai essayé de faire est d'ajouter quelques fonctions dans index.js de la bibliothèque partagée, puis d'exporter l'objet entier avec ces fonctions. Mais chaque fois que j'essaie d'appeler un objet précédemment importé (par var libs = require('shared.libs');), il est dit que libs n'est pas défini.

Qu'est-ce que je fais mal ici? Je veux généralement garder le même code, donc je n'aurai pas besoin de remplacer require partie partout, mais en même temps fournir des fonctionnalités supplémentaires de la bibliothèque partagée qui sera disponible à partir de cet objet libs importé.

+1

Afficher plus de code - comment vous essayez d'exporter les nouvelles fonctions, où est le 'require' qui n'est pas travailler, etc –

+0

@IvanVergiliev Le code de la façon dont je 'l'exporter' et comment' 'require' est expliqué à peu près. Comment pourrais-je l'améliorer? J'ai essayé d'exporter directement la fonction comme 'exports.test = function() {console.log (" test ");}' et ensuite 'require' il d'un autre endroit, a également essayé de créer un nouvel objet qui implémente toutes les fonctions nécessaires et' export 'ça. Les deux façons ne fonctionnent pas. Chaque fois que j'essaie d'appeler libs.test(), il me dit que libs est indéfini. Et chaque fois que je vérifie l'objet libs via node-inspector, il me donne la même sortie. – AlexKey

+1

Donc, vous dites que tant que vous avez seulement 'exports.sth = require (module)', tout est bon, mais si vous ajoutez aussi 'exports.fun = function() {}', tout le module s'arrête travailler, est-ce exact? Ça ne sonne pas très bien. –

Répondre

5

cela devrait certainement travailler:

module.exports = { 
    async: require('async'), 
    config: require('./config'), 
    utils: require('./lib/utils'), 
    foo: function() { 
    return 'bar'; 
    } 
}; 

référence comme:

var libs = require('shared.libs'); 

console.log(libs.async); 
console.log(libs.config); 
console.log(libs.utils); 
console.log(libs.foo); 
console.log(libs.foo()); 

Ce qui me fait étonnant est l'un de vos commentaires ci-dessus, que vous obtenez une erreur libs is not defined. Cela ressemble à vous devriez avoir d'autres erreurs inaperçues avant .. lors de l'initialisation de votre module shared.libs ..

+0

Cela fonctionne, mais comme je l'ai mentionné, j'ai besoin de solution où je n'aurai pas besoin de passer par-dessus tous les fichiers en changeant la partie 'require' partout. Donc, si c'était comme 'var libs = require ('shared.libs');' 'var config = libs.config;' Ensuite, il devrait rester ainsi. Tout ce que je veux, c'est être capable d'appeler l'objet libs, ce qui me donne 'undefined' – AlexKey

+0

l'interface reste parfaitement telle qu'elle était .. mis à jour l'exemple de référence dans mon poste pour vous montrer – lrsjng

+0

J'ai essayé ceci, mais ne semble pas fonctionner. Je reçois toujours 'libs n'est pas défini». Ce qui est gênant. – AlexKey

Questions connexes