Je ne parviens pas à trouver un scénario où un global var
est la meilleure option, bien sûr vous pouvez en avoir un, mais jetez un œil à ces exemples et vous trouverez peut-être un meilleur moyen d'accomplir la même chose:
Scénario 1: mettre les choses dans les fichiers de configuration
Vous avez besoin d'une valeur identique dans toute l'application, mais cela change en fonction de l'environnement (production, développement ou test), le type de courrier par exemple, dont vous auriez besoin:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
et
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(faire une configuration similaire pour les développeurs aussi)
Pour décider quelle configuration sera chargée, créez un fichier de configuration principal (il sera utilisé dans toute l'application)
// File: config/config.js
var _ = require('underscore');
module.exports = _.extend(
require(__dirname + '/../config/environments/' + process.env.NODE_ENV + '.json') || {});
Et maintenant, vous pouvez obtenir les données comme ceci:
// File: server.js
...
var config = require('./config/config');
...
mailer.setTransport(nodemailer.createTransport(config.mailerType, config.mailerConfig));
Scénario 2: utiliser un fichier de constantes
// File: constants.js
module.exports = {
appName: 'My neat app',
currentAPIVersion: 3
};
Et utilisez-le de cette façon
// 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);
...
Scénario 3: utiliser une fonction d'assistance pour obtenir / définir les données
Pas un grand fan de celui-ci, mais au moins vous pouvez suivre l'utilisation du 'nom' (en citant l'exemple de l'OP) et mettre en place des validations.
// 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;
};
Et utilisez-le
// 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();
...
Il pourrait y avoir un cas d'utilisation où il n'y a pas d'autre solution que d'avoir un global var
, mais généralement vous pouvez partager les données dans votre application en utilisant l'un de ces scénarios, si vous commencez à utiliser node.js (comme je l'étais il y a quelque temps) essayez pour organiser la façon dont vous gérez les données là-bas, car cela peut devenir très rapidement compliqué.