2013-11-27 7 views
6

मैं अपने ऐप को भागों में एमवीसी की तरह कुछ अलग करना चाहता हूं ... वर्तमान में मुझे exports काम करता है और विभिन्न फ़ाइलों के बीच संवाद कैसे किया जाता है। एक बात जिसे मैं समझ नहीं सकता वह यह है कि वैश्विक दायरे में स्थिरांक का उपयोग कैसे करें? वर्तमान में मैं कुछ इस तरह है: स्वचालित रूप से server.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(); 

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

क्या यह संभव है या मैं उन्हें चर के रूप में पारित करने के लिए की जरूरत है?

उत्तर

0

जावास्क्रिप्ट स्थिरांक नोड.जे.एस. में फ़ाइलों में विश्व स्तर पर काम नहीं करेगा। आपको उन्हें फ़ंक्शन में पास करने की आवश्यकता है।

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

लेकिन आईडी अधिक एक समारोह के बजाय एक तर्क की तरह ... जैसा कि अधिक मैं NodeJS में गोता, और अधिक मैं शुरू इसके विपरीत ... – Kin

+0

एक चर का निर्यात करें एक सिंगलटन निर्यात करें, इसलिए आपको मॉड्यूल की आवश्यकता हो सकती है, कुछ मानों को बदल सकते हैं और फिर आवश्यकता होने पर आपको एक ही वस्तु मिल जाएगी। यह सिर्फ एक डिजाइन पैटर्न है, नोड.जेएस या यहां तक ​​कि किसी भी प्रकार की प्रोग्रामिंग भाषा का नुकसान नहीं। –

14

मुझे लगता है कि आपको स्थिरांक के साथ फ़ाइल बनाने की आवश्यकता है और उसे अन्य मॉड्यूल शुरू करने के लिए फ़ाइल की आवश्यकता है।

फ़ाइल 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

"पीएस" हिस्सा कमाल है: डी – olyv

0

यह विधि विधि @4030347 द्वारा सुझाए गए जैसा ही नहीं है लेकिन थोड़ा अलग है।

यहां, आपको स्थिरांक के साथ फ़ाइल बनाने की आवश्यकता है और उस मॉड्यूल की शुरुआत में फ़ाइल की आवश्यकता है जिसके रूप में आप उपयोग करना चाहते हैं।

फ़ाइल 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 
संबंधित मुद्दे