No puedo encontrar un escenario en el que un global var
sea la mejor opción, por supuesto que puede tener uno, pero eche un vistazo a estos ejemplos y puede encontrar una mejor manera de lograr lo mismo:
Escenario 1: poner las cosas en archivos de configuración
Necesita un valor que sea el mismo en toda la aplicación, pero cambia según el entorno (producción, desarrollo o prueba), el tipo de correo como ejemplo, necesitaría:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
y
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(hacer una configuración similar para dev también)
Para decidir qué configuración se cargará, cree un archivo de configuración principal (se usará en toda la aplicación)
// File: config/config.js
var _ = require('underscore');
module.exports = _.extend(
require(__dirname + '/../config/environments/' + process.env.NODE_ENV + '.json') || {});
Y ahora puede obtener los datos de esta manera:
// File: server.js
...
var config = require('./config/config');
...
mailer.setTransport(nodemailer.createTransport(config.mailerType, config.mailerConfig));
Escenario 2: usar un archivo de constantes
// File: constants.js
module.exports = {
appName: 'My neat app',
currentAPIVersion: 3
};
Y úsalo de esta manera
// 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);
...
Escenario 3: usar una función auxiliar para obtener / establecer los datos
No soy un gran admirador de este, pero al menos puedes rastrear el uso del 'nombre' (citando el ejemplo del OP) y poner las validaciones en su lugar.
// 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;
};
Y úsalo
// 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();
...
Podría haber un caso de uso cuando no hay otra solución que tener una global var
, pero generalmente puede compartir los datos en su aplicación usando uno de estos escenarios, si está comenzando a usar node.js (como lo hice hace algún tiempo) intente para organizar la forma en que maneja los datos allí porque puede volverse desordenado realmente rápido.