Non riesco a trovare uno scenario in cui un globale var
sia l'opzione migliore, ovviamente puoi averne uno, ma dai un'occhiata a questi esempi e potresti trovare un modo migliore per ottenere lo stesso:
Scenario 1: inserire gli elementi nei file di configurazione
Hai bisogno di un valore che sia lo stesso in tutta l'applicazione, ma cambia a seconda dell'ambiente (produzione, sviluppo o test), il tipo di mailer come esempio, avresti bisogno di:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
e
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(fai una configurazione simile anche per dev)
Per decidere quale configurazione verrà caricata, creare un file di configurazione principale (che verrà utilizzato in tutta l'applicazione)
// File: config/config.js
var _ = require('underscore');
module.exports = _.extend(
require(__dirname + '/../config/environments/' + process.env.NODE_ENV + '.json') || {});
E ora puoi ottenere i dati in questo modo:
// File: server.js
...
var config = require('./config/config');
...
mailer.setTransport(nodemailer.createTransport(config.mailerType, config.mailerConfig));
Scenario 2: utilizzare un file costanti
// File: constants.js
module.exports = {
appName: 'My neat app',
currentAPIVersion: 3
};
E usalo in questo modo
// 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);
...
Scenario 3: utilizzare una funzione di supporto per ottenere / impostare i dati
Non è un grande fan di questo, ma almeno puoi tenere traccia dell'uso del 'nome' (citando l'esempio del PO) e mettere in atto delle validazioni.
// 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 usalo
// 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();
...
Potrebbe esserci un caso d'uso in cui non esiste altra soluzione se non quella globale var
, ma di solito puoi condividere i dati nella tua app usando uno di questi scenari, se stai iniziando a usare node.js (come ero prima) per organizzare il modo in cui gestisci i dati laggiù perché possono diventare disordinati molto rapidamente.