如何为我的生产环境配置Redis商店?

时间:2015-02-23 05:41:16

标签: javascript node.js express redis

我正在尝试为会话存储设置Redis,但是没有工作。我正在使用passport.jsexpress-flash,如果我尝试运行当前的Redis设置,它就无法工作:

var session = require('express-session');
var favicon = require('serve-favicon');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var redis = require("redis").createClient();
var RedisStore = require("connect-redis")(session);

var load = require('express-load');
var flash = require('express-flash');
var path = require('path');
var logger = require('morgan');
var i18n = require('i18n-2');
var passport = require('passport');
var mongoose = require('mongoose');

如果我使用此会话设置:

app.use(session({
  secret: 'keyboard cat'
}));

这将显示一个错误,表示在生产中使用不安全,但passport.js和快速闪存将起作用。

转到Redis:

app.use(session({
  store: new RedisStore({
     host: 54.94.171.197, 
     port: 3000,
     client: redis
   }),
  secret: 'keyboard cat'
}));

我应该将静态IP放入主机并将3000放入端口吗?我对需要传递给新实例的正确值感到困惑。

这是我的中间件:

app.use(favicon(__dirname + '/public/images/icons/fav.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: false
}));
app.use(flash());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
  store: new RedisStore({
    host: global.config.site.host,
    port: 6379,
    client: redis
  }),
  secret: 'keyboard cat'
}));

// Productions Middlewares

if (process.env.NODE_ENV === 'production') {
  app.use(passport.initialize());
  app.use(passport.session());
  app.use('/admin', middleware.ensureAuthenticated);
  app.use(middleware.ensureHttps);
}

1 个答案:

答案 0 :(得分:1)

在代码中包含应用程序的配置是不好的做法。

使用类似nconf之类的内容来配置代码。

例如,您可以使用config.json文件:

{
    "sessionSecret": "cat something",
    "redis": {
        "host": "localhost",
        "port": 6379
    }
}

配置nconf以查找配置文件

var nconf = require('nconf');
nconf.file({ file: '/path/to/config.json' })

然后使用会话中间件

中的配置
app.use(session({
  store: new RedisStore({
     host: nconf.get('redis:host'),
     port: nconf.get('redis:port'),
     client: redis
   }),
  secret: nconf.get('sessionSecret')
}));