Não consigo encontrar um cenário em que uma global var
seja 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.