Saya tidak dapat menemukan skenario di mana global var
adalah pilihan terbaik, tentu saja Anda dapat memilikinya, tetapi lihatlah contoh-contoh ini dan Anda mungkin menemukan cara yang lebih baik untuk mencapai hal yang sama:
Skenario 1: Tempatkan barang-barang di file konfigurasi
Anda memerlukan beberapa nilai yang sama di seluruh aplikasi, tetapi itu berubah tergantung pada lingkungan (produksi, dev atau tes), jenis mailer sebagai contoh, Anda akan perlu:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
dan
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(buat konfigurasi serupa untuk dev juga)
Untuk memutuskan konfigurasi mana yang akan dimuat, buat file konfigurasi utama (ini akan digunakan di seluruh aplikasi)
// File: config/config.js
var _ = require('underscore');
module.exports = _.extend(
require(__dirname + '/../config/environments/' + process.env.NODE_ENV + '.json') || {});
Dan sekarang Anda bisa mendapatkan data seperti ini:
// File: server.js
...
var config = require('./config/config');
...
mailer.setTransport(nodemailer.createTransport(config.mailerType, config.mailerConfig));
Skenario 2: Gunakan file konstanta
// File: constants.js
module.exports = {
appName: 'My neat app',
currentAPIVersion: 3
};
Dan gunakan seperti ini
// 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);
...
Skenario 3: Gunakan fungsi pembantu untuk mendapatkan / mengatur data
Bukan penggemar berat yang satu ini, tapi setidaknya Anda dapat melacak penggunaan 'nama' (mengutip contoh OP) dan menempatkan validasi di tempat.
// 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;
};
Dan gunakan itu
// 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();
...
Mungkin ada kasus penggunaan ketika tidak ada solusi selain memiliki global var
, tetapi biasanya Anda dapat berbagi data di aplikasi Anda menggunakan salah satu skenario ini, jika Anda mulai menggunakan node.js (seperti saya beberapa waktu lalu) coba untuk mengatur cara Anda menangani data di sana karena itu bisa sangat cepat berantakan.