No puedo encontrar un escenario en el que un global varsea 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.