在另一个js文件中使用对象

我得到了我的手在node.js,我想了解整个需求/出口的东西。 我有以下主要的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文件中使用客户端对象,但是如何在我的路由中使用同一个对象呢?

由于reqres已经被Express传递,你可以将client连接到一个或两个定制的中间件:

 app.use(function (req, res, next) { req.client = res.client = client; next(); }); 

请注意,顺序与中间件app.use(app.router); ,所以这将需要在app.use(app.router);之前app.use(app.router);

但是,您可以在任何路由处理程序中访问client

 exports.index = function(req, res){ req.client.get(..., function (err, ...) { res.render('index', { title: 'Express' }); }); }; 

最简单的方法是从您的路由文件中导出一个函数,该函数接受一个客户端,并返回一个包含路由的对象:

 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);