快速路由共享variables

我最近开始学习node.js + Express,发现它很有趣。

我已经阅读了许多有关在路由中共享variables的post,其中许多是使用module.exports和exports。

我决定做一个函数来设置一个局部variables

路线/ test.js

var db; exports.setup = function(_db){ db = _db; }; exports.doit = function(req, res){ db.get("testToken", function(err, result) { console.log("err: " + err); console.log("result: " + result); res.send("respond with a resource"); }); }; 

app.js

 var redis = require("redis"); var db = redis.createClient(); var test = require("./routes/test.js"); test.setup(db); // configuration... app.get('/', test.doit); 

可以做这样的事吗?

我想确保我不会多次连接数据库连接,共享variables是我能想到的唯一方法。

你能提出一些build议吗?

谢谢!!

这应该工作得很好。 虽然,你可能会考虑将“设置”从“路线”中分离出来。

由于db始终是相同的值,因此可以使用Express 3的prototype对象将其附加到所有路由中的req和/或res对象:

routes/test.js

 exports.doit = function(req, res){ req.db.get("testToken", function(err, result) { console.log("err: " + err); console.log("result: " + result); res.send("respond with a resource"); }); }; 

app.js

 var redis = require("redis"); var db = redis.createClient(); var test = require("./routes/test.js"); // "setup" express.request.db = express.response.db = db; // configuration app.get('/', test.doit); 

但是,您也可以将“设置”定义为自定义中间件:

 // before: app.use(app.router); app.use(function (req, res, next) { req.db = res.db = db; next(); }); 

基本上,它看起来不错,但它可能是module.exports而不是只是exports

此外,我会封装模块代码到自行执行的匿名函数,以防止名称冲突和声明module.exports一次。

像这样的东西:

 (function() { var _db; setup = function (db){ _db = db; }; doit = function (req, res){ _db.get("testToken", function(err, result) { console.log("err: " + err); console.log("result: " + result); res.send("respond with a resource"); }); }; module.exports = { setup: setup, doit: doit } }).call(this);