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

nak*_*nak 12 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' })
};
Run Code Online (Sandbox Code Playgroud)

默认情况下(express从命令行运行后),这是main中的routes部分app.js:

// Routes

app.get('/', routes.index);
Run Code Online (Sandbox Code Playgroud)

我在main中为redis客户端设置了一个变量app.js:

var redis = require('redis'),
    db = redis.createClient();
Run Code Online (Sandbox Code Playgroud)

我想知道如何访问包含在其中的文件中的方法db(以及我require在其中的任何其他模块app.js)./routes

Mar*_* M. 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();
Run Code Online (Sandbox Code Playgroud)

db on index和其他文件都将获得redis客户端的相同实例


Jam*_*son 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
Run Code Online (Sandbox Code Playgroud)