Вопрос

Прямо сейчас я храню данные о своем сеансе в «Store Memory Store», который поставляется в комплекте с Connect (Express). Но я хочу/должен изменить это для производства.

Приложение использует MongoDB, и я установил Mongoose для обработки всех Communications.

Например, подключитесь к БД после инициализации моего приложения:

var mongo = require('mongoose');
mongo.connect('mongodb://localhost/myDb');
mongo.connection.on('open', function () {
  app.listen(3000);
}

Я нашел модуль Connect-MongoDB, но я не знаю, как реализовать его с помощью Mongoose, или если это действительно возможно? Мне нужно добавить что -то вроде этого:

var mongoStore = require('connect-mongodb');
// ...
app.use(express.session({
  secret: 'topsecret',
  maxAge: new Date(Date.now() + 3600000),
  store: new mongoStore({ db: 'myDb' })
}));

Или мне нужно определить свое соединение DB во второй раз, используя модуль MongoDB напрямую?

Это было полезно?

Решение

В конце концов я использую немного каждого ответа, который давал ранее:

  • Я переключился с Connect-MongoDB на модуль Connect-Mongo
  • Я использую общий объект CONF для хранения данных о конфигурации
  • Есть два соединения БД, потому что с ним легче справиться с мной (возможно, позже изменилось, если/когда выйдет новая версия Mongoose/Express)

требования:

var express = require('express'),
    MongoStore = require('connect-mongo')(express),
    mongo = require('mongoose');

CONF объект:

var conf = {
  db: {
    db: 'myDb',
    host: '192.168.1.111',
    port: 6646,  // optional, default: 27017
    username: 'admin', // optional
    password: 'secret', // optional
    collection: 'mySessions' // optional, default: sessions
  },
  secret: '076ee61d63aa10a125ea872411e433b9'
};

Тогда я смогу настроить это так:

app.configure(function(){
  // ...
  app.use(express.cookieParser());
  app.use(express.session({
    secret: conf.secret,
    maxAge: new Date(Date.now() + 3600000),
    store: new MongoStore(conf.db)
  }));
  // important that this comes after session management
  app.use(app.router);
  // ...
});

и, наконец, подключитесь к MongoDB во второй раз, используя Mongoose:

var dbUrl = 'mongodb://';
dbUrl += conf.db.username + ':' + conf.db.password + '@';
dbUrl += conf.db.host + ':' + conf.db.port;
dbUrl += '/' + conf.db.db;
mongo.connect(dbUrl);
mongo.connection.on('open', function () {
  app.listen(3000);
});

Другие советы

Пожалуйста, укажите

app.use(express.cookieParser());

прямо раньше

app.use(express.session({

В противном случае ошибки бросает, как ниже,

TypeError: не удается прочитать свойство «connect.sid» неопределенного

Похоже, вы могли бы сделать это для настройки connect-mongodb Предполагая, что ваш код подключения в мангуозе, выше, запускается ранее:

app.use(express.session({
  secret: 'topsecret',
  maxAge: new Date(Date.now() + 3600000),
  store: new mongoStore({ db: mongoose.connections[0].db })
}));

Так connect-mongodb не использует монгуз, он использует node-mongodb-native Водитель (т.е.: npm install mongodb) Монгуз также зависит от этого водителя, поэтому он должен присутствовать.

Смотря на Код напрямую, вы должны предоставить информацию о подключении DB MongoStore объект:

store: new mongoStore({ host: 'session_server', port: 27017, db: 'seesion', collection: 'sessions' })

Как правило, для этого вам нужно иметь какой -то объект «конфигурации» или переменную, которую можно динамически загружать (DeV против теста против Prod). Затем вы вытаскиваете хост/порт/дБ/аут из этого объекта конфигурации.

Для Express 4x:

var express = require('express'),
    session = require('express-session'),
    MongoStore = require('connect-mongo')(session),
    mongo = require('mongoose');

var conf = {
  db: {
    db: 'myDb',
    host: '192.168.1.111',
    port: 6646,  // optional, default: 27017
    username: 'admin', // optional
    password: 'secret', // optional
    collection: 'mySessions' // optional, default: sessions
  },
  secret: '076ee61d63aa10a125ea872411e433b9'
};

app.configure(function(){
  app.use(express.cookieParser());
  app.use(session({
    secret: conf.secret,
    maxAge: new Date(Date.now() + 3600000),
    store: new MongoStore(conf.db)
  }));
});

var dbUrl = 'mongodb://';
dbUrl += conf.db.username + ':' + conf.db.password + '@';
dbUrl += conf.db.host + ':' + conf.db.port;
dbUrl += '/' + conf.db.db;
mongo.connect(dbUrl);
mongo.connection.on('open', function () {
  app.listen(3000);
});

session был перемещен в свой собственный модуль, поэтому вам нужно require это и используйте session При настройке MongoStore.

Вы можете передать объект сведений о подключении (хост, имя пользователя, пароль и т. Д.).

Вы также можете передать URL -адрес подключения, например, mongodb: // user: pass@host.com/db_name.

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

В последнем коде вы можете передать ручку с существующим соединением, экземпляр mongodb.Db. Анкет С мангузом это будет mongoose.connection.db. Анкет Тем не менее, этот код не в реальном выпуске, и когда я попробовал его, он не сработал. Вероятно, еще не готов к использованию (или непроверенным).

Я уверен, что если вы ждете следующего релиза, вы сможете пройти в существующем соединении с мангуозом. В то же время вам просто нужно принять два соединения, одно из Mongoose и одно от Connect-Mongodb.

Я получил информацию об соединении от https://github.com/tedeh/connect-mongodb И я получил информацию о просмотре источника (соответствующий коммит).

Я просто спотыкаюсь Монгус-сессия

Очень легкий и сработал для меня. От github ...

Монтаж

npm install mongoose-session

Использовать

var express = require('express');

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/db');

var app = express();

app.use(require('express-session')({
    key: 'session',
    secret: 'SUPER SECRET SECRET',
    store: require('mongoose-session')(mongoose)
}));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top