Contents
Express.jsでエラーメッセージを隠す方法
Express.jsのエラーメッセージ
参考にしたのはExpress.js公式ページです。
Webアプリケーションを公開する際に不要なエラーメッセージを出力すると攻撃者に情報を与えてしまうため、セキュリティ上望ましくありません。
なのでエラーメッセージを隠します。基本的にはExpress.jsの機能でエラーハンドリングはできます。
Express.jsの404エラーでこんな感じです。
Not Found 404 NotFoundError: Not Found at /Users/xxx/Desktop/test/app.js:27:8 at Layer.handle [as handle_request] (/Users/xxx/Desktop/test/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:317:13) at /Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:335:12) at next (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:275:10) at /Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:635:15 at next (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:260:14) at Function.handle (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:174:3) at router (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:47:12)
デフォルトのapp.jsでは404エラーを生成してデフォルトのError画面に遷移します。Node.jsって即バレですね。
productionモードの設定
EJSのerror.statusおよびerror.stackが出力されるのはNODE_ENVがdevelopmentの場合のみで、productionに設定しておけばエラーは表示されません。
公式ページにも書いてありました。
公式から抜粋↓
Set the environment variable NODE_ENV to production, to run the app in production mode.
私はpackage.jsonのscripts.startにNODE_ENV=productionを設定しました。
nodeのところをnodemonやforever startを使用していても動きます。
package.json "scripts": { "start": "NODE_ENV=production node ./bin/www" },
404エラー
404エラーはわかりやすく表示させたいとかの場合は、ステータス404、メッセージを設定して新規画面を設定することもできます。
ExpressのFAQによると404はエラーではなく、ミドルウェアの機能として実行されるようです。
ルーティングできなかった扱い。そのため、errorやmessageは自分で設定します。
修正前
// catch 404 and forward to error handler app.use(function(req, res, next) { next(createError(404)); });
修正後
// catch 404 and forward to error handler app.use(function(req, res, next) { res.status(404); res.locals.error = {}; res.render('error', {message: "404: The page was not found"}); });
最後に
ここまでで(というかほぼデフォルト設定)で変なエラーを出してしまうことはなくなるのではないかと。
ただ、コーディングの際にファイル名がないなど変なエラーを出してしまうとフォルダ構成が出てしまったりするので、そこはきちんと処理するようにしましょう。
コメントを残す