2016-06-03 3 views
1

Derzeit ich eine App in Express bin develloping und ich habe mehrere Dienste geschaffen, die Module aus einem einzigen index.js Datei mit dem Namen sind:Vermeiden wiederholen Aussagen erfordern in NodeJS Module

"use strict"; 

const MAX_TEXT_LENGTH = 100; 

var mysql = require('mysql') 
    , _  = require('underscore') 
    , Q  = require('q') 
    , moment = require('moment') 
    , env  = process.env.NODE_ENV || 'development' 

module.exports.module1  = require('./module1'); 
module.exports.module2  = require('./module2'); 
module.exports.moduleN  = require('./moduleN'); 

Dank dieser Struktur kann ich Rufen Sie jetzt ein einziges Mal an var Services = require('./services') und ich habe Zugriff auf alle Dienste.

Das Problem ist, dass die Module, Konstanten und "globale" Variablen in dieser Datei nicht in den Modulen zur Verfügung stehen, so dass ich sie viele Male aufrufen muss.

Ich habe auch versucht, vars als let zu nennen, aber das funktioniert nicht.

Gibt es eine Möglichkeit, Module und Variablen in dieser index.js Datei zu definieren und sie in Modulen zu verwenden?

Danke !!!

Antwort

1

Geben Sie in Ihren Modulen anstelle eines einfachen Werts ein Objekt zurück, bei dem jeder Schlüssel eine der Variablen ist, die Sie exportieren möchten. Etwas wie das.

var myModuule = { 
    varIWantToExport: 1, 
    methodIWantToExport: function() { return "Hello world!";} 
} 
module.exports = myModule; 

Und dann, wenn Sie es in anderen Modulen benötigen, können Sie etwas tun:

var myModule = require("./my-module"); 
var myMethod = myModule.methodIWantToExport 
var myVar = myModule.varIWantToExport; 

Offensichtlich dies nur Ihre Module gilt. Wenn Sie versuchen, einige Variablen/Methoden zu verwenden, die in einem Modul nicht öffentlich zugänglich sind, machen Sie vielleicht etwas falsch.

+0

Danke dlopez! Aber mein Fall ist das Gegenteil, die Frage ist, ob es möglich ist, zu sagen, dass "globale Variablen" außerhalb eines Moduls definiert sind. Sie als "vars" zu deklarieren ist nicht gültig. – Joss

+1

In diesem Fall kann das Modul eine Funktion exportieren, die einige Argumente benötigt. Diese Argumente werden Ihre "globalen Variablen" sein, die von außerhalb des Moduls kommen. Dann, wenn Sie Ihr Modul benötigen, müssen Sie so etwas tun. 'var myModule = require (" ./ mein-modul ") (global1, global2, ...) Ich denke, dass es das Einzige ist, was wir tun können, weil die Module tatsächlich vollständig von der außerhalb von sich selbst. – dlopez