2019-03-15に更新

TypeORMの接続をセッションとして利用する

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開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント