Я не можу знайти сценарій, коли глобальний var
варіант є найкращим варіантом, звичайно, його можна мати, але подивіться на ці приклади, і ви можете знайти кращий спосіб досягти того ж:
Сценарій 1: Введіть матеріал у конфігураційні файли
Вам потрібно певне значення, яке воно однакове для програми, але воно змінюється залежно від середовища (виробництво, розробник або тест), типу повідомлень, наприклад, вам знадобиться:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
і
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(зробіть аналогічну конфігурацію і для dev)
Щоб вирішити, який конфігурацію буде завантажено, створіть основний файл конфігурації (це буде використовуватися у всій програмі)
// 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: Використовуйте допоміжну функцію для отримання / встановлення даних
Це не великий фанат цього, але, принаймні, ви можете відстежувати використання "імені" (посилаючись на приклад ОП) та встановлювати перевірки на місці.
// 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 (як я колись тому), спробуйте організувати те, як ви обробляєте дані там, тому що вони можуть швидко заплутатися.