Я не могу найти сценарий, в котором глобальный var
вариант является лучшим вариантом, конечно, вы можете его иметь, но взгляните на эти примеры, и вы можете найти лучший способ добиться того же:
Сценарий 1. Поместите все в файлы конфигурации
Вам нужно какое-то значение, которое одинаково во всем приложении, но оно меняется в зависимости от среды (производственная, разработанная или тестовая), например, от типа почтовой программы, которые вам понадобятся:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
и
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(сделайте аналогичный конфиг и для разработчика)
Чтобы решить, какая конфигурация будет загружена, создайте основной файл конфигурации (он будет использоваться во всем приложении)
// File: config/config.js
var _ = require('underscore');
module.exports = _.extend(
require(__dirname + '/../config/environments/' + process.env.NODE_ENV + '.json') || {});
И теперь вы можете получить такие данные :
// File: server.js
...
var config = require('./config/config');
...
mailer.setTransport(nodemailer.createTransport(config.mailerType, config.mailerConfig));
Сценарий 2: использование файла констант
// File: constants.js
module.exports = {
appName: 'My neat app',
currentAPIVersion: 3
};
И используйте это так
// 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);
...
Сценарий 3: использование вспомогательной функции для получения / установки данных
Не большой поклонник этого, но, по крайней мере, вы можете отслеживать использование `` имени '' (цитируя пример OP) и проводить проверки.
// 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;
};
И использовать это
// 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();
...
Возможен вариант использования, когда нет другого решения, кроме глобального var
, но обычно вы можете поделиться данными в своем приложении, используя один из этих сценариев, если вы начинаете использовать node.js (как я был когда-то назад), попробуйте чтобы организовать то, как вы обрабатываете данные там, потому что они могут очень быстро стать беспорядочными.