如何在node.js Express 2.5.5中的单独路由文件中访问主app.js中声明的变量?

时间:2012-01-19 18:21:05

标签: javascript node.js express

我刚开始使用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 require的方法(以及app.js中我./routes的其他模块) >

3 个答案:

答案 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');});
}