在Express 2.x中访问Route Handler中的Redis

时间:2012-09-05 16:20:03

标签: node.js routes express redis

我使用CLI创建了一个Express 2.x应用程序。所以我有一个路由目录和一个index.js。 现在,在app.js中,我已连接到Redis,它可以正常工作。

我在app.js中调用routes / index.js文件中的函数:

app.post('/signup', routes.myroute);

myroute函数包含从Redis获取密钥的代码。

现在,我收到redis未定义的错误。 如何将redis对象从app.js传递到routes / index.js?

2 个答案:

答案 0 :(得分:1)

最简单的解决方案

你可能有一个require()函数,在你的app.js中包含一个redis lib。只需取出该行并将其添加到index.js文件的顶部。

如果您使用的是node_redis模块,只需包含以下内容:

var redis = require("redis"),
client = redis.createClient();


替代方法

如果您要重用现有连接,请尝试将client变量传递给index.js中的函数:

app.js

app.post('/signup', routes.myroute(client));

index.js

exports.myroute = function(client) {
    // client can be used here
}

答案 1 :(得分:1)

您正在使用Express,因此使用Connect,因此请使用Connect中间件。特别是会话中间件。 Connect的会话中间件具有商店的概念(某处存储会话内容)。该存储可以在内存中(默认)或在数据库中。因此,请使用redis商店(connect-redis)。

var express = require('express'),
    RedisStore = require('connect-redis')(express),
util = require('util');

var redisSessionStoreOptions = {
    host: config.redis.host, //where is redis
    port: config.redis.port, //what port is it on
    ttl: config.redis.ttl, //time-to-live (in seconds) for the session entry
    db: config.redis.db //what redis database are we using
}

var redisStore = new RedisStore(redisSessionStoreOptions);
redisStore.client.on('error', function(msg){
    util.log('*** Redis connection failure.');
    util.log(msg);
    return;
});
redisStore.client.on('connect', function() {
    util.log('Connected to Redis');
});

app = express();

app.use(express.cookieParser());  
app.use(express.session({ 
        store: redisStore, 
        cookie: {   path: '/', 
                    httpOnly: true, //helps protect agains cross site scripting attacks - ie cookie is not available to javascript
                    maxAge: null }, 
        secret: 'magic sauce',  //
        key: 'sessionid' //The name/key for the session cookie
    }));

现在,Connect会话魔术会将会话详细信息放在传递到每个路由的'req'对象上。 这样,您就不需要在整个地方传递redis客户端。让req对象为你工作,因为你无论如何都要在每个路由处理程序中免费获得它。

确保你做了:     npm install connect-redis