मैं ऐसा परिदृश्य नहीं खोज पा रहा हूं, जहां एक वैश्विक var
विकल्प सबसे अच्छा हो, निश्चित रूप से आप एक हो सकते हैं, लेकिन इन उदाहरणों पर एक नज़र डालें और आप इसे पूरा करने का एक बेहतर तरीका पा सकते हैं:
परिदृश्य 1: कॉन्फ़िगर फ़ाइलों में सामान रखें
आपको आवेदन के दौरान समान मूल्य की आवश्यकता है, लेकिन यह पर्यावरण (उत्पादन, देव या परीक्षण), मेलर प्रकार उदाहरण के आधार पर बदलता है, आपको इसकी आवश्यकता होगी:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
तथा
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(देव के लिए भी एक समान विन्यास बनाएं)
यह तय करने के लिए कि कौन सा कॉन्फिगर लोड किया जाएगा, एक मुख्य कॉन्फिग फाइल बनायेगा (इसका उपयोग पूरे एप्लिकेशन में किया जाएगा)
// File: config/config.js
var _ = require('underscore');
module.exports = _.extend(
require(__dirname + '/../config/environments/' + process.env.NODE_ENV + '.json') || {});
और अब आप इस तरह से डेटा प्राप्त कर सकते हैं :
// File: server.js
...
var config = require('./config/config');
...
mailer.setTransport(nodemailer.createTransport(config.mailerType, config.mailerConfig));
परिदृश्य 2: एक स्थिरांक फ़ाइल का उपयोग करें
// File: constants.js
module.exports = {
appName: 'My neat app',
currentAPIVersion: 3
};
और इसे इस तरह से उपयोग करें
// File: config/routes.js
var constants = require('../constants');
module.exports = function(app, passport, auth) {
var apiroot = '/api/v' + constants.currentAPIVersion;
...
app.post(apiroot + '/users', users.create);
...
परिदृश्य 3: डेटा प्राप्त / सेट करने के लिए एक सहायक फ़ंक्शन का उपयोग करें
इसका एक बड़ा प्रशंसक नहीं है, लेकिन कम से कम आप 'नाम' (ओपी के उदाहरण का हवाला देते हुए) के उपयोग को ट्रैक कर सकते हैं और मान्यताओं को लागू कर सकते हैं।
// File: helpers/nameHelper.js
var _name = 'I shall not be null'
exports.getName = function() {
return _name;
};
exports.setName = function(name) {
//validate the name...
_name = name;
};
और इसका उपयोग करें
// File: controllers/users.js
var nameHelper = require('../helpers/nameHelper.js');
exports.create = function(req, res, next) {
var user = new User();
user.name = req.body.name || nameHelper.getName();
...
एक उपयोग मामला हो सकता है जब वैश्विक होने के अलावा कोई अन्य समाधान नहीं होता है var
, लेकिन आमतौर पर आप अपने ऐप में इन परिदृश्यों में से एक का उपयोग करके डेटा साझा कर सकते हैं, यदि आप नोड का उपयोग करना शुरू कर रहे हैं। जेएस (जैसा कि मैं कुछ समय पहले था) जिस तरह से आप डेटा को वहां संभालते हैं उसे व्यवस्थित करने के लिए क्योंकि यह वास्तव में जल्दी गड़बड़ हो सकता है।