在另一个js文件中使用object

时间:2013-08-18 20:49:31

标签: node.js

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

2 个答案:

答案 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已传递reqres,因此您可以将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' });
  });
};