主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ
書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。
2022/03/01
Git LFS のプロキシサーバーを Vercel に投げつけたんですが、そのとき req.body
が undefined
だったので、その対処法としての方法を紹介します。
Express (Vercel) を使ってる場合、 app.use(express.json())
で JSON に対応できるようになっています。
しかし、これは Content-Type
ヘッダーを見ているのか、例えば以下のような Content-Type
の場合は JSON としてパースされません。
Content-Type: application/vnd.git-lfs+json
これは Git LFS のクライアントが投げる Content-Type および Accept ヘッダーで、まぁ要するに JSON なんですが、上記のミドルウェア設定では対応していないので、自前でパースする必要があります。
ということで、それは以下のようなコードで対応が可能です。
const readAsJson = async (req: VercelRequest): Promise<string> => {
const body: Uint8Array[] = [];
return new Promise((resolve, reject) => {
req.on("data", (chunk) => {
body.push(chunk);
});
req.on("end", () => {
resolve(Buffer.concat(body).toString());
});
req.on("error", () => reject()));
});
};
const handler = async (req: VercelRequest, res: VercelResponse) => {
if (req.method === "POST") {
const jsonStr = await readAsJson(req);
}
};
export default handler;
簡単ですね。ということで今日のメモでした。