Não consigo encontrar um cenário em que uma global varseja a melhor opção, é claro que você pode ter uma, mas dê uma olhada nesses exemplos e poderá encontrar uma maneira melhor de realizar o mesmo:
Cenário 1: Coloque as coisas nos arquivos de configuração
Você precisa de algum valor que seja o mesmo no aplicativo, mas ele muda dependendo do ambiente (produção, desenvolvimento ou teste), do tipo de mala direta como exemplo, você precisa:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
e
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(faça uma configuração semelhante para dev também)
Para decidir qual configuração será carregada, crie um arquivo de configuração principal (isso será usado em todo o aplicativo)
// File: config/config.js
var _ = require('underscore');
module.exports = _.extend(
require(__dirname + '/../config/environments/' + process.env.NODE_ENV + '.json') || {});
E agora você pode obter dados como este:
// File: server.js
...
var config = require('./config/config');
...
mailer.setTransport(nodemailer.createTransport(config.mailerType, config.mailerConfig));
Cenário 2: Use um arquivo de constantes
// File: constants.js
module.exports = {
appName: 'My neat app',
currentAPIVersion: 3
};
E use desta maneira
// 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);
...
Cenário 3: Use uma função auxiliar para obter / definir os dados
Não é um grande fã deste, mas pelo menos você pode acompanhar o uso do 'nome' (citando o exemplo do OP) e colocar as validações em vigor.
// 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;
};
E use
// 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();
...
Pode haver um caso de uso em que não há outra solução além de ter uma global var, mas geralmente você pode compartilhar os dados em seu aplicativo usando um desses cenários, se estiver começando a usar o node.js (como eu estava há algum tempo), tente para organizar a maneira como você lida com os dados por lá, porque eles podem ficar confusos muito rápido.