3

我正在着手使用 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 文件中使用客户端对象,但是如何在我的路由中使用相同的对象呢?

4

2 回答 2

1

由于req并且res已经被 Express 传递,您可以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' });
  });
};
于 2013-08-18T21:24:03.243 回答
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);
于 2013-08-18T20:55:55.483 回答