我使用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?
答案 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