![](/img/trans.png)
[英]Node Express.js access variables from routes declared in separate files
[英]How to access variables declared in main app.js in separate route files in node.js Express 2.5.5?
我剛開始使用Express(2.5.5)的新版本,默認情況下會創建一個./routes
目錄以及./views
和./public
在路由內部有一個index.js
文件,其中包含:
/*
* GET home page.
*/
exports.index = function(req, res){
res.render('index', { title: 'Express' })
};
默認情況下(從命令行運行express
之后),這是主app.js
的routes部分:
// Routes
app.get('/', routes.index);
我在主app.js
為redis客戶端設置了一個變量:
var redis = require('redis'),
db = redis.createClient();
我想知道如何在./routes
包含的文件中訪問db
(以及我在app.js
中require
其他模塊)的./routes
我真的很喜歡Jamund的解決方案,但我會將這個概念擴展到:
// db.js
var redis = require('redis');
module.exports = redis.createClient();
// index.js
var db = require(.'/db')
// whatever other file
var db = require(.'/db')
// do something with db
db.disconnect();
db on index和其他文件都將獲得redis客戶端的相同實例
只需在文件頂部調用即可。 需要位於共享空間中,因此您可以多次重新請求該文件,並且它將始終引用相同的版本。 如果你想要花哨,你可以創建自己的db模塊,做類似的事情,以防止雙重創建客戶端:
// db.js
var db
var redis = require('redis')
exports.connect = function() {
if (!db) db = redis.createClient()
return db
}
exports.disconnect = function() {
redis.quit()
db = null
}
// index.js
var dbHelper = require(.'/db')
var db = dbHelper.connect()
// whatever other file
var dbHelper = require(.'/db')
var db = dbHelper.connect() // won't connect twice
您可以創建全局應用程序並掛起要共享的變量,也可以在路徑文件中使用初始化程序功能
FE
// app.js
var app = express.createServer()
, db = require('redis').createClient();
require('./routes').with(app, db);
// routes.js
module.exports.with = function(app, db) {
app.get('/',function(r,s) { s.end('Sweet');});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.