Open2

Cloud Functions と Express のミドルウェア

hankei6kmhankei6km
  1. Node.js でHTTP ハンドラ関数を作っている
  2. Express 用のバリデーションライブラリを使いたくなる
  3. ライブラリはミドルウェアとして使うことになる(必須ではないらしいが)

Express のミドルウェアを渡すようにとのことなのでライブラリで作ったミドルウェアを利用することを自体はよいのだろうけど、実際にやるとなるとどんな感じかなと。

https://cloud.google.com/functions/docs/writing/write-http-functions?hl=ja#implementation

Node.js で、Functions Framework for Node.js を使用して HTTP ハンドラ関数を登録します。HTTP ハンドラ関数は、リクエストとレスポンスの引数を受け入れて HTTP レスポンスを送信する Express ミドルウェア関数である必要があります。

hankei6kmhankei6km

試してみた

サンプルはないかなと探してみたところ firebase-functions を利用している例があった。大筋はかわらないだろうと思って参考にさせていただく。

https://www.typea.info/blog/index.php/2020/10/30/google_cloud_functions_express/

とりあえず functions-framework で確認。いちおう動いた。

import * as functions from "@google-cloud/functions-framework";
import express from "express";

const app = express();

const router = express.Router();
app.use(router);
router.get("/", (req, res) => {
  res.send("Hello World!");
});
router.get("/test", (req, res) => {
  res.send("TEST!");
});

// Register an HTTP function with the Functions Framework
//functions.http("chk1", async (req, res) => {
//  res.send("OK");
//});

functions.http("chk1", app);

下記で動かした後に /test でそれぞれの結果がかえってくることは確認できた。

$ npx functions-framework --target=chk1 --signature-type=http

最初、express は個別にインストールしたが functions-framework の依存関係で入っていた(使うならこちらの方がよいのかな)。

➜  workspace git:(master) ✗ npm ls express
templateforv2-static@1.0.0 /project/home/hankei6km/workspace
└─┬ @google-cloud/functions-framework@3.1.3
  └── express@4.18.2

(バリデーションのライブラリも含め)実際に使うかは検討中。