2013-11-27 21 views
6

我想分開我的應用程序的部分有像MVC的東西...目前我想出了exports作品以及如何在不同的文件之間進行通信。我不明白的一點是如何在全局範圍內使用常量?目前,我有這樣的事情:如何在全局範圍的nodejs中定義const?

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

是否有可能自動分配該常量server.js或者我需要他們通過爲變量?

回答

0

JavaScript常量不能在Node.js文件中全局工作。你需要將它們傳遞給函數。

// 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

但ID更像是一個參數,而不是一個功能......隨着越來越多的我在潛水的NodeJS,我越開始不像它... – Kin

+0

導出一個變量意味着導出一個單例,所以你可以要求一個模塊,改變一些值,當再次需要時你會得到同一個對象。它只是一種設計模式,並不是node.js甚至任何一種編程語言的缺點。 –

14

我想,你需要用常量創建文件,並在開始其他模塊時使用他作爲require文件。

文件consts.js

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

在模塊在必要時:

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

所以所有的全局變量將在一個地方

+0

是的,但你需要明白它們不是全局變量。單例模式可能是更好的描述它的方法。 –

1

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

附:請不要這樣做

+1

「P.S.」部分是真棒:D – olyv

0

這種方法與@ user3040347建議的方法相同,但有點不同。

在這裏,您需要創建具有常量的文件,並將其作爲需要使用的模塊開始的需求文件。

文件consts.js

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

在必要的模塊:

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