[Node.js]Node.js+Expressでrequest entity too largeがでた時の話

2019.04.02



こんにちは千田です。

 

 

今回はExpressの開発でちょっと詰まったことがあったので、その話を書きたいと思います。

 

 

Expressバージョン:4.16.4

 

 

画像データをBase64にエンコードしてサーバーにPOSTするような処理を実装していたところ、

 

 

request entity too large  413

 

 

ふむ。なんだこれ。

 

ちなみにクライアント側はこんな感じでcanvasの画像をBase64エンコードしてajaxでPOSTしています。

[cc_javascript]
let canvas = document.createElement(“canvas”);
let ctx = canvas.getContext(“2d”);
let video;

$(‘#save’).on(‘click’, () => {

canvas.width = 640;
canvas.height = 480;
ctx.drawImage(video, 0, 0);

$.ajax({
url : ‘/ajax/save’,
type: ‘post’,
data: {
‘image’: canvas.toDataURL()
}
})
.done((result) => {
console.log(result);
})
.fail((err) => {
console.log(err);
});

});

[/cc_javascript]

 

調べてみると、要するに

 

 

POSTしてくるデータが大きすぎるよ!

 

 

ってことですね。

 

 

 

というわけで早速、post_max_sizeを変えればいいんだなーと思ったわけですが・・・!?

 

 

千田は元々PHPをやっていた事もあり、サクッと設定変える気でいましたが、

post_max_sizeなんてどこにもない。

 

 

 Node.jsでどうやってやんの???

となったので色々調べたところ下記の対応でクリア。

 

[cc_javascript]
app.use(express.urlencoded({ extended: true }));
[/cc_javascript]

[cc_javascript]
app.use(express.urlencoded({ extended: true, limit: ’10mb’ }));
[/cc_javascript]

に変更。

 

 

jsonの場合も同様。

[cc_javascript]
app.use(express.json({ extended: true, limit: ’10mb’ }));
[/cc_javascript]

 

 

ちなみにresuest bodyのデフォルトサイズは100kbに設定されているようです。

 

 

無事、request entity too largeも消えて画像のアップロードができるようになりました。

めでたし。めでたし。

 

参考:

https://qiita.com/PianoScoreJP/items/3fbcebc43ebf821074d8


Top