blogexpressのエラーハンドラーは引数の数が4つじゃないとダメ2018/03/13Tweetあけましておめでとうございます。本年もよろしくお願いいたします。(1⁄31)今年は一か月に一回のポストが目標です。(1⁄31)最近は仕事でnodeを書いており、サーバーはexpressを使っているのですが、documentをちゃんと読まないで痛い目見たという話を書きます。nodeの関数まずnode(js)の特徴としてcallbackがあると思います。ge});このとき、nodeとしては、callbackに何個引数を渡してもOKです。undefined});つまるところnodeの処理系には、Javaのようなオーバーロード(引数の違いで別の関数とみなす)の仕組みはないです。当然ですが関数に渡された引数は未使用でもよいです。bはhoge内で未使用}hoge('ho');eslintnodeの静的解析ツールは、eslintを使用しています。[https://eslint.org/docs/rules/no-unused-vars]があります。このルールはeslintの推奨設定です。前述の例は下記のように指摘されます。no-unused-vars便利ですね。hogeはbは使用していないので省略して書けます。res.render('error');});これをeslintにかけると、使ってない変数が指摘されます。no-unused-varsよしじゃあnext消しますか、と、消しても一見普通に動きます。あるときまったく関係ない部分でエラーがぼろぼろ出るようになりました。[http://expressjs.com/en/4x/api.html]をみると、思いっきり書いてました。errors.訳:エラーハンドラーのコールバックに渡す引数の数は、絶対4つにしとけええ。実装はこのあたりみたいです。https://github.com/expressjs/express/blob/master/lib/router/layer.js#L62-L68個人的にはnodeで引数の数を指定するのはイマイチだと思います。ドキュメントは隅々まで読みましょう。eslintの設定で、no-used-varsのargsをnoneに設定すれば一応指摘は消せます。