itsource

node.js + express.js: mongodb/mongoose를 사용한 세션 처리

mycopycode 2023. 5. 2. 22:40
반응형

node.js + express.js: mongodb/mongoose를 사용한 세션 처리

지금은 connect(express)와 함께 제공되는 "메모리 저장소"에 세션 데이터를 저장하고 있습니다.하지만 생산을 위해 이것을 바꾸고 싶습니다.

그 애플리케이션은 mongodb를 사용하고 있고 나는 모든 db-communication을 처리하기 위해 mongoose를 설치했습니다.

예: 앱 초기화 후 DB에 연결:

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' })
}));

아니면 mongodb-module을 직접 사용하여 DB 연결을 다시 정의해야 합니까?

결국 저는 이전에 주어진 모든 답변을 사용하고 있습니다.

  • connect-mongodb에서 connect-mongo 모듈로 전환했습니다.
  • 구성 데이터를 저장하기 위해 일반 conf 개체를 사용하고 있습니다.
  • 제가 처리하기 쉽기 때문에 두 개의 DB 연결이 있습니다(나중에 새로운 버전의 몽구스/몽구스가 출시되면 변경될 수 있습니다).

요구 사항:

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);
  // ...
});

마지막으로 mongoose를 사용하여 mongodb에 다시 연결합니다.

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({

그렇지 않으면 아래와 같은 오류가 발생합니다.

유형 오류: 정의되지 않은 속성 '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-mongodbMongoose를 사용하지 않고, 그것은 사용합니다.node-mongodb-native드라이버(예: npm install mongodb) Mongoose 또한 이 드라이버에 의존하므로 존재해야 합니다.

코드를 직접 보면, 당신은 당신의 DB 연결 정보를 다음과 같이 제공해야 합니다.MongoStore객체:

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

일반적으로 동적으로 로드할 수 있는 "config" 개체 또는 변수(dev vs test vs prod)가 필요합니다.그런 다음 해당 구성 개체에서 host/port/db/auth를 꺼냅니다.

고속 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.

연결 세부 정보 개체(호스트, 사용자 이름, 암호 등)를 전달할 수 있습니다.

mongodb://user:pass@host.com /db_name과 같은 연결 URL을 전달할 수도 있습니다.

이 두 가지 방법은 몽구스 연결이 이미 있는지 여부에 관계없이 자동으로 새 연결을 시작합니다.

당신은 인 최코드서에, 은핸기연존결을인, 로전수있다니습달의 할 수 .mongodb.Db는 몽구스, 몽구스입니다.mongoose.connection.db하지만 이 코드는 실제 릴리스에 없고, 제가 시도해보니 작동하지 않았습니다.아직 사용할 준비가 되지 않았거나 테스트되지 않았을 수 있습니다.

다음 릴리스를 기다리면 기존 몽구스 연결을 통과할 수 있을 것이라고 확신합니다.그 사이에 몽구스와 connect-mongodb의 두 가지 연결만 허용하면 됩니다.

저는 https://github.com/tedeh/connect-mongodb 에서 연결 정보를 얻었고, 소스를 보고 핸들 정보를 얻었습니다(commit).

몽구스 세션을 우연히 발견했습니다.

매우 가볍고 원활하게 작동했습니다.깃허브에서...

설치

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)
}));

언급URL : https://stackoverflow.com/questions/6819911/node-js-express-js-session-handling-with-mongodb-mongoose

반응형