Function Frameworks を利用してローカルで開発し、テストも問題無かった関数(node)をいざ本番の Cloud Funcion にデプロイしたら色々はまったので備忘録を残しました。
最終的に解決に至るまでの流れで状況と解決策を記載しています。
CORS
まず初めに CORS で怒られます。
ヘッダには Access-Control-Allow-Origin を追加してドメインを指定している状態です。暫くヘッダの値を弄ってみたけど解決せず、途中で処理が落ちると指定したヘッダ自体が送られないのでブラウザがCORS違反として認識しているだけだと気が付きました。
解決
CORS用の対応をしている認識があれば、部分で起きているエラーが解決すればヘッダも送信されます。
Error: Process exited with code 16
そしてログを見ても良く分からないエラー出ています。調べてみるとレスポンスの二重送信が原因のようです。
解決
エラー等で早期returnする場合は、res.end() を必ず行う。
ローカルでも怒られてよさそうなものですが、デプロイした関数で初めてエラーが出ました。
例えばこんな感じ
res.status(400).send('err').end()
tmpフォルダ
やっとまともなエラーログが上がってきて根本的な問題が判明しました。
一時保存領域として tmp が用意されているという事だったので ./tmp とパスを指定していたのですが、そんなディレクトリは無いと怒られていました。
解決
/tmp または os.tmpdir() と指定。
最後に
Cloud Funcion で作成した関数の機能としては
フロントのformから送信された情報とファイルを書き込み
ファイルをGoogle Driveにコピー
内容に応じて stripe の支払い用IDを生成
支払いが完了したらステータスを変更
という感じです。
初めてまともにCloudFunctionを使ったのですが、サーバレスで簡単に決済付きフォームが作れました。
宣伝
そしてここからは単なる宣伝ですが、個人事業主やぼっち会社の人向けに、
契約書を製本して返信用封筒や送付状などをセットで届けるサービスを始めました。
サービスを利用して頂くと
PDFをアップロード
製本済みの契約書2部、それぞれの住所が書かれた送付用, 返信用封筒、送付状、クリアファイルが到着
契約書に捺印して、送付用封筒に入れて先方へ送付
という感じになります。
5年は使い終わる気がしない、そしてどこに行ったか分からなくなりそうな製本テープを買うより良いと思うので気になる方は是非!
一先ず自分がセコセコと印刷してお送りする予定です😤
トジル
https://tojiru.jp/
↧