Tôi không thể tìm thấy một kịch bản trong đó toàn cầu var
là lựa chọn tốt nhất, tất nhiên bạn có thể có một kịch bản , nhưng hãy xem các ví dụ này và bạn có thể tìm thấy một cách tốt hơn để thực hiện tương tự:
Kịch bản 1: Đặt nội dung trong tệp cấu hình
Bạn cần một số giá trị giống nhau trên ứng dụng, nhưng nó thay đổi tùy thuộc vào môi trường (sản xuất, phát triển hoặc thử nghiệm), loại thư như ví dụ, bạn cần:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
và
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(tạo một cấu hình tương tự cho dev quá)
Để quyết định cấu hình nào sẽ được tải, hãy tạo một tệp cấu hình chính (điều này sẽ được sử dụng trên tất cả các ứng dụng)
// File: config/config.js
var _ = require('underscore');
module.exports = _.extend(
require(__dirname + '/../config/environments/' + process.env.NODE_ENV + '.json') || {});
Và bây giờ bạn có thể lấy dữ liệu như thế này:
// File: server.js
...
var config = require('./config/config');
...
mailer.setTransport(nodemailer.createTransport(config.mailerType, config.mailerConfig));
Kịch bản 2: Sử dụng tệp hằng
// File: constants.js
module.exports = {
appName: 'My neat app',
currentAPIVersion: 3
};
Và sử dụng nó theo cách này
// 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);
...
Kịch bản 3: Sử dụng chức năng trợ giúp để nhận / đặt dữ liệu
Không phải là một fan hâm mộ lớn của cái này, nhưng ít nhất bạn có thể theo dõi việc sử dụng 'tên' (trích dẫn ví dụ của OP) và đặt các xác nhận vào vị trí.
// 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;
};
Và sử dụng nó
// 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();
...
Có thể có trường hợp sử dụng khi không có giải pháp nào khác ngoài việc có toàn cầu var
, nhưng thông thường bạn có thể chia sẻ dữ liệu trong ứng dụng của mình bằng một trong những tình huống này, nếu bạn đang bắt đầu sử dụng node.js (như cách đây của tôi trước đây) để tổ chức cách bạn xử lý dữ liệu ở đó vì nó có thể trở nên lộn xộn rất nhanh.