Expressにてセッションを使うとなると最近はRedisとかがスタンダードになっていってると思いますが、MySQLをTypeORM経由で使いたい時の備忘録です。具体的にはexpress-mysql-sessionというライブラリを使います。
chill117/express-mysql-session: A MySQL session store for the express framework in node
マニュアルにも書かれている通り、ホストやポートなどを指定して接続できるのですが、アプリケーション側の接続と重複してしまうので、ORMのライブラリによる接続を共有する方法も可能となっています。
今回TypeORM 0.2を使っているのでそちらで接続できるようにしました。まずインポート。
const session = require('express-session')
const MySQLStore = require('express-mysql-session')(session)
そしてセッションの設定です。
const mysqlDriver: any = <any>connection.driver
app.use(
session({
secret: process.env.APP_KEY,
store: new MySQLStore({}, mysqlDriver.pool),
resave: false,
saveUninitialized: false,
cookie: { secure: process.env.NODE_ENV == 'production' }
})
)
TypeORMのConnectionがinterfaceを参照しているのか、細かいプロパティが取れないので仕方なくanyに変換してMySQLのStoreに渡すためのpoolを取得しています。(MySQLのconnectionだけじゃなくてpoolも使えます)
あと、resaveをtrueにしているとセッション情報を上書きしまくっておかしくなるようなのでfalseにしておきました。
まだ動かしてあまり時間が経っていないのでおかしなところなどがあればご指摘ください。また、まだTypeORMのバージョンが0.2なので変わってしまう可能性もあります。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント