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の開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年程。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel5, CakePHP3, JavaScript, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, Vue等色々

Crieitはβバージョンで開発中です。進捗は公式Twitterアカウントをフォローして確認してください。 興味がある方は是非記事の投稿もお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

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

関連記事

コメント