特定のURL以下だけパースしたいが、その他の広いパスではパースしたくないみたいなことが5年に1度ぐらい発生するかもしれないので、そのやり方のメモ。例えば99%のリクエストはプロキシーとしてそのまま他のプロセスに流す場合、パース作業はほぼ無駄になってしまうので必要なところでだけやりたいですよね?routerを作ってその下だけbody-parserを適用とかできるならそれでもいいかもしれませんが、微妙にそれもしにくい・・・みたいな場合に。
app.ts
import express, { Request, Response } from 'express';
// 本当はimportしなくてもいいはずだけどTypeScriptはimportしないとエラーになるっぽい
import { URLSearchParams } from 'url';
app.post('/form/receive', (req: Request, res: Response) => {
let body = '';
// streamのAPIを直接扱ってdata/endで情報を読み込む
req.setEncoding('utf8');
req.on('data', (chunk) => {
body += chunk;
});
req.on('end', () => {
// フォームのポストを受け取るのでURLSearchParams.
// JSONならJSON.parse
const params = new URLSearchParams(body);
console.log(params); // パースできてる!
res.end();
});
});
const port = process.env.NODE_PORT || 3000;
console.log(`listening at ${port}`);`
app.listen(port);