如何访问node.js Express 2.5.5中单独的path文件中的主app.js中声明的variables?
我刚刚开始使用新版本的Express(2.5.5),默认情况下会创build./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客户端设置了一个variables:
var redis = require('redis'), db = redis.createClient();
我想知道如何在./routes
包含的文件中访问db
的方法(以及我在app.js
中require
其他模块)
我非常喜欢Jamund的解决scheme,但是我将这个概念扩展到:
// 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();
索引和其他文件上的数据库都将获得相同的redis客户端实例
只需在您的文件的顶部调用这个。 需要在一个共享的空间,所以你可以重新需要多次的文件,它会始终引用相同的版本。 如果你想成为你想创build自己的数据库模块,可以这样做,以防止双重创build客户端:
// 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
你可以创build一个应用程序全局,并挂起你想要共享的variables,或者你可以在你的路由文件中使用初始化函数
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');}); }