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