2013-11-27 15 views
6

Voglio separare la mia app in parti per avere qualcosa come MVC ... Attualmente ho capito che exports funziona e come comunicare tra diversi file. L'unica cosa che non riesco a capire è come usare le costanti nell'ambito globale? Attualmente ho qualcosa di simile:Come definire const in nodejs in ambito globale?

// start.js 

const ROOT_DIR = __dirname; 
const APP_DIR = ROOT_DIR + '/app/'; 
const MODULES_DIR = '/usr/local/lib/node_modules/'; 
const APP_PORT = 4935; 

var server = require(APP_DIR + 'server.js'); 

server.start(); 

// server.js 

exports.start = function() { 
    var express = require(MODULES_DIR + 'express'), 
     app = express(), 
     http = require('http'), 
     server = http.createServer(app), 
     io = require(MODULES_DIR + 'socket.io').listen(server), 
     fs = require('fs'), 
     path = require('path'); 

    server.listen(APP_PORT); 

    app.use(express.static(ROOT_DIR + '/assets')); 

    app.get('/', function (req, res) { 
     res.sendfile(ROOT_DIR + '/views/index.html'); 
    }); 
} 

E 'possibile assegnare automaticamente questo costanti per server.js o ho bisogno di passarli come variabili?

risposta

0

Le costanti JavaScript non funzioneranno a livello globale tra i file in Node.js. Devi passarli alla funzione.

// start.js 

    const ROOT_DIR = __dirname; 
    const APP_DIR = ROOT_DIR + '/app/'; 
    const MODULES_DIR = '/usr/local/lib/node_modules/'; 
    const APP_PORT = 4935; 

    var server = require(APP_DIR + 'server.js'); 

    server.start(MODULES_DIR,APP_PORT,ROOT_DIR); 

    // server.js 

    exports.start = function(MODULES_DIR,APP_PORT,ROOT_DIR) { 
     var express = require(MODULES_DIR + 'express'), 
      app = express(), 
      http = require('http'), 
      server = http.createServer(app), 
      io = require(MODULES_DIR + 'socket.io').listen(server), 
      fs = require('fs'), 
      path = require('path'); 

     server.listen(APP_PORT); 

     app.use(express.static(ROOT_DIR + '/assets')); 

     app.get('/', function (req, res) { 
      res.sendfile(ROOT_DIR + '/views/index.html'); 
     }); 
    } 
+0

ma id più come un argomento piuttosto che una funzione ... Come più mi tuffo in nodejs, più comincio a differenza di ... – Kin

+0

Esportare una variabile significa esportare un singleton, quindi è possibile richiedere un modulo, modificare alcuni valori e quando si richiede nuovamente si otterrà lo stesso oggetto. È solo un modello di progettazione, non uno svantaggio di node.js o di qualsiasi tipo di linguaggio di programmazione. –

14

Penso che sia necessario creare un file con costanti e utilizzarlo come richiesto per iniziare un altro modulo.

consts.js file

exports.CONST_1 = 42, 
exports.CONST_2 = 123; 

Nel modulo, se necessario:

var consts = require('path_to_consts.js'); 
var my_var = consts.CONST_1 + consts.CONST_2; 

Quindi tutte le variabili globali saranno in un unico luogo

+0

Sì, ma è necessario capire che non sono variabili globali. Il pattern Singleton è forse un modo migliore per descriverlo. –

1

Object.defineProperty(global, 'MY_CONST', { value : 123 })

P.S. Per favore, non farlo

+1

"P.S." parte è fantastica: D – olyv

0

Questo metodo è lo stesso suggerito da @ user3040347 ma poco diverso.

Qui, è necessario creare un file con costanti e utilizzarlo come file richiesto all'inizio di un modulo in cui si desidera utilizzare.

consts.js file

CONST_1 = 42, 
CONST_2 = 123; 
module.exports = {}; 

Nel modulo, se necessario:

var consts = require('path_to_consts.js'); 
var my_var = CONST_1 + CONST_2; 
//Here you can access directly 
Problemi correlati