我刚开始使用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
app.get('/', routes.index);
我已在主app.js
中为redis客户端设置变量:
var redis = require('redis'),
db = redis.createClient();
我想知道如何在db
app.js
中我./routes
的其他模块) >
答案 0 :(得分:21)
我真的很喜欢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客户端的相同实例
答案 1 :(得分:5)
只需在文件顶部调用即可。需要位于共享空间中,因此您可以多次重新请求该文件,并且它将始终引用相同的版本。如果你想要花哨,你可以创建自己的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
答案 2 :(得分:3)
您可以创建全局应用并挂起要共享的变量,也可以在路径文件中使用初始化函数
f.e。
// 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');});
}