Подтвердить что ты не робот

Node. Перезагрузка сервера перезапускается.

У меня есть полностью функциональная система регистрации пользователей/аутентификации с использованием экспресс-соединения и промежуточного программного обеспечения.

app.use(express.session({store: require('connect').session.MemoryStore( {reapInterval: 60000 * 10} ) }))

Единственная проблема заключается в том, что при каждом перезапуске сервера сеансы прерываются.

https://github.com/remy/nodemon - и nodemon перезапускает node.js каждый раз, когда он обнаруживает смену файла.

Как я могу иметь постоянные сеансы?

4b9b3361

Ответ 1

Как и ваш код, вы говорите, что используете MemoryStore. Это изменчиво и очищается при перезагрузке. Я бы посоветовал вам использовать connect_redis для продолжения сеанса. Redis - чрезвычайно быстрый магазин.

  • Загрузить redis
  • compile redis: make
  • Запустить сервер: ./redis-server
  • npm install connect-redis
  •  

    var connect = require('connect') , RedisStore = require('connect-redis');
    
    connect.createServer(
      connect.cookieParser(),
      // 5 minutes
      connect.session({ store: new RedisStore })
    );
    

Это просто, чтобы вы начали быстро. Вы должны прочитать документацию и настроить redis, если хотите получить максимальную отдачу от redis.

Ответ 2

Я пытался получить Redis в пути, используя express.js, Google отправил меня сюда. Экспресс-реализация изменилась:

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

Еще одна важная вещь - порядок экспресс-конфигураций.

app.configure(function(){

    app.enable('strict routing'); // removes trailing slash
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jqtpl');
    app.register('.html', require('jqtpl').express);
    app.use(express.favicon());
    app.use(express.methodOverride());
    app.use(express.compiler({src: __dirname + '/public', enable: ['sass']}));
    app.use(express.static(__dirname + '/public'));
    app.use(app.router);
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({secret: _.config.secret, store: new RedisStore}));

});

cookieParser и конфигурации сеансов должны быть в конце конфигураций, а cookieParser необходимо разместить прямо перед express.session.

Надеюсь, что это поможет, я побежал в обеих этих проблемах.

Ответ 3

Я согласен со всеми о redis, но я думаю, что разные технологии - проблема с точки зрения обслуживания программного обеспечения. Если вы используете mongodb, например, есть connect-mongo (https://npmjs.org/package/connect-mongo), если вы используете mysql, есть connect-mysql (https://npmjs.org/package/connect-mysql), connect-couchdb для couchdb (https://npmjs.org/package/connect-couchdb) и т.д.

Ответ 4

Кроме того, если вы используете экспресс, вам нужно предоставить секрет, когда сообщать приложению использовать промежуточное программное обеспечение redis.

Итак, следуйте рецепту Альфреда выше, но сделайте следующее...

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

app.use( express.cookieParser() );
app.use( express.session( { secret: "keyboard cat", store: new RedisStore }));

Ответ 5

Когда node умирает, я бы предположил, что в хранилище памяти вы используете штампы.

Сохранять сеансы на диск?