2013-11-27 23 views
6

Uygulamamı MVC gibi bir şeye sahip olmak için parçalara ayırmak istiyorum ... Şu anda exports çalışmalarını ve farklı dosyalar arasında nasıl iletişim kuracağımı anladım. Anlayamadığım tek şey, global kapsamdaki sabitleri nasıl kullanacağım? Şu ben böyle bir şey var:Global kapsamda nodejs'de const nasıl tanımlanır?

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

mümkün mü otomatik server.js bu sabitleri atamak veya i değişkenler olarak onları geçmesi gerekiyor?

cevap

0

Javascript sabitleri, tüm dünyada Node.js. Onları işleve iletmelisin.

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

ama id daha i nodejs dalış daha gelince ... bir tartışma yerine bir işlev gibi, daha i start farklı olarak ... – Kin

+0

Bir değişken dışa aktarma, bir tekil dışa aktarma anlamına gelir, böylece bir modül gerektirebilir, bazı değerleri değiştirebilirsiniz ve gerektiğinde aynı nesneyi alırsınız. Bu sadece bir tasarım deseni, node.js'nin bir dezavantajı ve hatta herhangi bir programlama dilidir. –

14

Sanırım, sabitleri olan bir dosya oluşturmaya ihtiyacınız var ve onu başka bir modülde başlatmak için gerekli dosyayı kullanmalısınız.

Dosya consts.js modülde

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

gerektiğinde:

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

Yani tüm global değişkenler tek bir yerde

+0

Evet, ancak bunların global değişkenler olmadığını anlamanız gerekiyor. Singleton kalıbı onu tanımlamak için belki daha iyi bir yoldur. –

1

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

Dip not olacak Lütfen, bunu yapma

+1

"P.S." bölüm müthiş: D – olyv

0

Bu, @ user3040347 tarafından önerilen fakat biraz farklı olan yöntemle aynıdır.

Burada, sabitleri olan bir dosya oluşturmanız ve kullanmak istediğiniz bir modülün başında onu gerekli dosya olarak kullanmanız gerekir.

Dosya consts.js gerekli modülde

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