0
1

More than 3 years have passed since last update.

express-sessionをMongodbで。

Last updated at Posted at 2021-03-23

初めに

今回の記事は対して裏取りをしておりませんので憶測で物をいうことが多いと思います。気になりすぎて夜も眠れネェヨクソが!という方は"フッザケンじゃねぇよ!"を接頭辞にコメントを寄せてもらえればと思います。

connect-mongo

バージョンがアップしたのかどうなのかこちらのモジュールを日本語の記事を参考に使おうと思えば使えませんでした。というわけで、公式のページを参考にちょこっとだけ覚書していきます。解説はしません。というかできません。(まだべんきょうちゅー)

node.js
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);

⇓⇓⇓

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

上のようにしてrequireしてみようとすれば、

TypeError: Class constructor MongoStore cannot be invoked without 'new' at Object.<anonymous>

というエラーが出てきて、よくわからなかったので公式のページを見てみれば下の様に完結of完結に書いてありました。・・・よくわかんないけど、まぁ、いっか!バージョン違いとか多分そんなんでしょ。

node.js
var options = {
  db:'example',
  host:'localhost',
  port:27017,

  ...
  etc
  ...

  clear_interval: 60 * 60
}

⇓⇓⇓

var options = {
  mongoUrl: 'mongodb://username:password@localhost:27017/database',
  autoRemove: 'native'
};

optionsと分けるか分けないかは個人の自由ですけれど、自分は分けたい派の人間ですので分けました。
このoptionsもhostとかdbとかportとかあった・・・のかな?あったみたいですが、mongoUrlと簡潔になりましたね。mongodbモジュールでアクセスするときと全く同じURLでいけるようです。

node.js
app.use(session({
  secret:'foo',

  store: new MongoStore(options)
}));

⇓⇓⇓

app.use(session({
  secret: 'foo',

  store:MongoStore.create(options)
}));

sessionの中身です。new MongoStore(options)で出来たようですが、自分がやってみれば出来なかったですので、公式のページをみたところ、MongoStore.create(options)でできるようです。ほんといろいろと変わったんですね。できることなら変えないでほしかったんですけど。(楽々参考にできるドキュメントがなくなるから)

最後

というわけで、ほんとに最低限ですけど、この設定でエラーは起きませんでした。その代わり警告は出ますけどね。しかし優秀なプログラマーのあなた方であれば、警告の一つや二つは解決することなんて簡単でしょう!
というわけで終わりです。
困った人の助けに少しでもなればよかったのですが。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1