我正在接触node.js,我正在尝试了解整个require / exports事件。我有以下主app.js文件:
/app.js
var express = require('express'),
http = require('http'),
redis = require('redis'),
routes = require('./routes'),
var app = express(),
client = redis.createClient();
// some more stuff here...
// and my routes
app.get('/', routes.index);
然后,我有路径文件:
exports.index = function(req, res){
res.render('index', { title: 'Express' });
};
我当然可以在app.js文件中使用客户端对象,但是如何在路由中使用相同的对象?
答案 0 :(得分:1)
最简单的方法是从路由文件中导出一个带有客户端的函数,然后返回一个带有路径的对象:
exports = module.exports = function (client) {
return {
index: function (req, res) {
// use client here, as needed
res.render('index', { title: 'Express' });
}
};
};
然后从app.js
:
var client = redis.createClient(),
routes = require('./routes')(client);
答案 1 :(得分:1)
由于Express已传递req
和res
,因此您可以将client
附加到自定义中间件中的一个或两个:
app.use(function (req, res, next) {
req.client = res.client = client;
next();
});
请注意,顺序对中间件很重要,因此需要在app.use(app.router);
之前。
但是,您可以访问任何路由处理程序中的client
:
exports.index = function(req, res){
req.client.get(..., function (err, ...) {
res.render('index', { title: 'Express' });
});
};