Ich kann kein Szenario finden, in dem ein Global var
die beste Option ist. Natürlich können Sie eines haben, aber sehen Sie sich diese Beispiele an und finden Sie möglicherweise einen besseren Weg, um dasselbe zu erreichen:
Szenario 1: Legen Sie das Material in Konfigurationsdateien ab
Sie benötigen einen Wert, der für die gesamte Anwendung gleich ist, der sich jedoch je nach Umgebung (Produktion, Entwicklung oder Test) ändert, beispielsweise als Mailer-Typ, den Sie benötigen:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
und
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(Machen Sie eine ähnliche Konfiguration auch für Entwickler)
Um zu entscheiden, welche Konfiguration geladen wird, erstellen Sie eine Hauptkonfigurationsdatei (diese wird in der gesamten Anwendung verwendet).
// File: config/config.js
var _ = require('underscore');
module.exports = _.extend(
require(__dirname + '/../config/environments/' + process.env.NODE_ENV + '.json') || {});
Und jetzt können Sie die Daten wie folgt erhalten:
// File: server.js
...
var config = require('./config/config');
...
mailer.setTransport(nodemailer.createTransport(config.mailerType, config.mailerConfig));
Szenario 2: Verwenden Sie eine Konstantendatei
// File: constants.js
module.exports = {
appName: 'My neat app',
currentAPIVersion: 3
};
Und benutze es so
// 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);
...
Szenario 3: Verwenden Sie eine Hilfsfunktion, um die Daten abzurufen / einzustellen
Kein großer Fan von diesem, aber zumindest können Sie die Verwendung des 'Namens' (unter Berufung auf das Beispiel des OP) verfolgen und Validierungen einrichten.
// 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;
};
Und benutze es
// 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();
...
Es kann einen Anwendungsfall geben, wenn es keine andere Lösung als eine globale var
gibt. Normalerweise können Sie die Daten in Ihrer App jedoch mithilfe eines dieser Szenarien freigeben, wenn Sie beginnen, node.js (wie ich es vor einiger Zeit getan habe) zu verwenden um die Art und Weise zu organisieren, wie Sie mit den Daten dort umgehen, da sie sehr schnell unordentlich werden können.