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-mongodb
Mongoose를 사용하지 않고, 그것은 사용합니다.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
'itsource' 카테고리의 다른 글
~/.composer/vendor/bin 디렉토리를 PATH에 배치하는 방법은 무엇입니까? (0) | 2023.05.02 |
---|---|
iOS 시뮬레이터 스크린샷은 어디에 저장됩니까? (0) | 2023.05.02 |
간단한 WPF 라디오 버튼 바인딩? (0) | 2023.05.02 |
AssertionError: 데이터베이스 연결이 UTC로 설정되지 않았습니다. (0) | 2023.05.02 |
강력한 유형의 부분 뷰에 추가 뷰 데이터 전달 (0) | 2023.05.02 |