2013-11-27 5 views
6

私はMVCのようなものを持っている部分に私のアプリを分けたいと思っています...現在、私はexports作品と異なるファイル間の通信方法を考え出しました。私が理解できない1つのことは、グローバルスコープで定数を使用する方法ですか?現在、私はこのようなものがあります:グローバルスコープでnodejの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 })

P.S.になりますしないでください。

+1

"P.S."一部は素晴らしいです:D – olyv

0

これは、@ user3040347で提案されている方法と同じですが、少し異なります。

ここでは、定数でファイルを作成し、使用するモジュールのbeginでrequireファイルとして使用する必要があります。

ファイル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 
関連する問題