iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Firebase】CloudFunctionsでメンテナンス中画面にリダイレクトさせる

今回は、下記のようなCloudFunctionsdeNext.jsがホストされている状態を想定してメモしています👷‍♀️

const { join } = require('path')
const { https } = require('firebase-functions')
const { default: next } = require('next')

const nextjsDistDir = join('src', require('./src/next.config.js').distDir)

const nextjsServer = next({
  dev: false,
  conf: {
    distDir: nextjsDistDir,
  },
})
const nextjsHandle = nextjsServer.getRequestHandler()

exports.nextjsFunc = https.onRequest((req, res) => {
  return nextjsServer.prepare().then(() => nextjsHandle(req, res))
})

Ref: https://github.com/vercel/next.js/blob/canary/examples/with-firebase-hosting/firebaseFunctions.js

結論

https.onRequestのコールバックで渡される、Responseからリダイレクトをすることができます。

const { join } = require('path')
const { https } = require('firebase-functions')
const { default: next } = require('next')

const nextjsDistDir = join('src', require('./src/next.config.js').distDir)

const nextjsServer = next({
  dev: false,
  conf: {
    distDir: nextjsDistDir,
  },
})
const nextjsHandle = nextjsServer.getRequestHandler()

exports.nextjsFunc = https.onRequest((req, res) => {
  const maintenanceUrl = `${req.protocol}://${req.hostname}/maintenance`
  if (サービスを停止するための条件) {
    return res.redirect(maintenanceUrl)
  }
  return nextjsServer.prepare().then(() => nextjsHandle(req, res))
})

てな感じ本日も以上となります🍺

参考

expressjs.com

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com