[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しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  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);
    });

  });

 

調べてみると、要するに

 

 

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

 

 

ってことですね。

 

 

 

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

 

 

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

post_max_sizeなんてどこにもない。

 

 

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

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

 

1
app.use(express.urlencoded({ extended: true }));

1
app.use(express.urlencoded({ extended: true, limit: '10mb' }));

に変更。

 

 

jsonの場合も同様。

1
app.use(express.json({ extended: true, limit: '10mb' }));

 

 

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

 

 

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

めでたし。めでたし。

 

参考:

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


Top