ฉันไม่พบสถานการณ์ที่โลกvar
เป็นตัวเลือกที่ดีที่สุดแน่นอนว่าคุณสามารถมีได้ แต่ลองดูตัวอย่างเหล่านี้แล้วคุณอาจพบวิธีที่ดีกว่าในการทำสิ่งเดียวกันให้สำเร็จ:
สถานการณ์ที่ 1: ใส่สิ่งต่างๆในไฟล์ config
คุณต้องการค่าบางอย่างที่เหมือนกันในแอปพลิเคชัน แต่จะเปลี่ยนแปลงไปขึ้นอยู่กับสภาพแวดล้อม (การผลิตการพัฒนาหรือการทดสอบ) ประเภทจดหมายตามตัวอย่างที่คุณต้องการ:
// File: config/environments/production.json
{
"mailerType": "SMTP",
"mailerConfig": {
"service": "Gmail",
....
}
และ
// File: config/environments/test.json
{
"mailerType": "Stub",
"mailerConfig": {
"error": false
}
}
(สร้าง config ที่คล้ายกันสำหรับ 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: ใช้ฟังก์ชันตัวช่วยเพื่อรับ / ตั้งค่าข้อมูล
ไม่ใช่แฟนตัวยงของคนนี้ แต่อย่างน้อยคุณสามารถติดตามการใช้ 'ชื่อ' (อ้างถึงตัวอย่างของ 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();
...
อาจมีกรณีการใช้งานเมื่อไม่มีวิธีแก้ปัญหาอื่นนอกจากการมี global var
แต่โดยปกติคุณสามารถแชร์ข้อมูลในแอปของคุณโดยใช้สถานการณ์เหล่านี้หากคุณเริ่มใช้ node.js (เหมือนที่เคยเป็นมาก่อน) ลอง เพื่อจัดระเบียบวิธีจัดการข้อมูลตรงนั้นเพราะอาจทำให้ยุ่งได้อย่างรวดเร็ว