connect-redis不想连接到远程主机

时间:2016-08-13 00:02:16

标签: node.js amazon-web-services redis elastic-beanstalk

序言:我在AWS EB上运行节点应用程序,并且我使用Elasticache redis服务器进行会话管理。我尝试使用connect-redis连接到elasticache,它似乎没有使用我提供的主机设置,而是默认为127.0.0.1。

我正在运行一个节点应用程序,其中redis服务器已设置为缓存。 main.js如下:

var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var expressSession = require('express-session');
var redis   = require("redis");
var redisStore = require('connect-redis')(expressSession);

// Application libraries
var express = require('express');

// Redis client
var redisclient  = redis.createClient();
redisclient.on("error", function (err)
{
    console.log("REDIS Error " + err);
});

// Initialise the application
var app = express();

var sessionport = isNaN(process.env.SESSION_PORT) ? 6379 : Number(process.env.SESSION_PORT);
console.log('redis://' + process.env.SESSION_HOST + ':' + sessionport);
var store = new redisStore({
    host: process.env.SESSION_HOST,
    port: sessionport,
    client: redisclient,
    ttl :  2.29e+7
});
app.use(expressSession({
    saveUninitialized: false,
    resave: false,
    secret: process.env.SESSION_SECRET,
    store: store
}));

我的环境变量是:

SESSION_HOST: my-session-host.usw2.cache.amazonaws.com
SESSION_PORT: 6379
SESSION_SECRET: supersecret

但是,当我的服务器启动时,我看到节点输出的以下输出:

Worker #1 is online. (pid 17643)
redis://liamegan-session-001.i0o002.0001.usw2.cache.amazonaws.com:6379
REDIS Error Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
REDIS Error Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
REDIS Error Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379

尽管我提供了一个主机,但它似乎试图连接到127.0.0.1。我还尝试构建并向redisStore构造函数提供redis URL。

我在这里做了哪些明显错误的事情?

1 个答案:

答案 0 :(得分:2)

这里的问题是我将现有的redisclient提供给redisStore构造函数。这样做胜过新客户端的创建,因此会覆盖那里设置的主机和端口。为了解决这个问题,我只是将主机和端口添加到redis.createClient。

// Redis client
var sessionport = isNaN(process.env.SESSION_PORT) ? 6379 : Number(process.env.SESSION_PORT);
var redisclient  = redis.createClient({
    host: process.env.SESSION_HOST,
    port: sessionport
});