[解決済み] Node.js + Express.jsアプリケーションのエラー処理原則?
質問
Node.js+ではエラーの報告/処理が異なるようです。 Express.js アプリケーションは、他のフレームワークと比較して 以下のように動作するという理解で合っていますか?
A) 検出 をコールバック関数のパラメータとして受け取ることで、エラーの発生を回避することができます。例えば
doSomethingAndRunCallback(function(err) {
if(err) { … }
});
B) 報告書 のエラーは、next(err) を呼び出すことで、MIDDLEWARE で発生します。例
handleRequest(req, res, next) {
// An error occurs…
next(err);
}
C) 報告書 のエラーを投げることで、ROUTESにエラーが発生する。例
app.get('/home', function(req, res) {
// An error occurs
throw err;
});
D) ハンドル のエラーは、app.error()で独自のエラーハンドラを設定するか、一般的なConnectエラーハンドラを使用します。例
app.error(function(err, req, res, next) {
console.error(err);
res.send('Fail Whale, yo.');
});
この4つの原則は、Node.js+Express.jsアプリケーションにおけるすべてのエラー処理/レポーティングの基礎となるものでしょうか?
どのように解決するのか?
Node.jsのエラー処理は、一般的にA)の形式です。ほとんどのコールバックは、第1引数としてエラーオブジェクトを返すか、あるいは
null
.
Express.jsはミドルウェアを使用しており、ミドルウェアの構文はB)とE)(後述)を使用します。
C)は私に言わせればバッドプラクティスです。
app.get('/home', function(req, res) {
// An error occurs
throw err;
});
上記のように簡単に書き換えることができます。
app.get('/home', function(req, res, next) {
// An error occurs
next(err);
});
ミドルウェアの構文が有効なのは
get
リクエストに対応します。
D)に関しては
(07:26:37) tjholowaychuk: 3.xではapp.errorは削除されました。
TJが確認したところ
app.error
は非推奨で、E を使用します。
E)
app.use(function(err, req, res, next) {
// Only handle `next(err)` calls
});
長さが4(引数が4つ)のミドルウェアは、エラーミドルウェアとみなされます。を呼び出すと
next(err)
connectが行って、エラー系ミドルウェアを呼び出す。
関連
-
[解決済み】Heroku + node.jsのエラー(Webプロセスが起動後60秒以内に$PORTにバインドできなかった)。
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み] TypeError: コールバックはnodejsの関数ではありません。
-
[解決済み] nvm は npm config の "prefix" オプションと互換性がありません。
-
[解決済み] エラーです。Expressでビューの検索に失敗しました
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
-
[解決済み] Node.js/Windowsのエラーです。ENOENT, stat 'C:\Users﹑RTAppData﹑Roaming﹑npm'.
-
[解決済み] Node.jsの例外処理のベストプラクティス
-
[解決済み] Node.jsで "Cannot find module "エラーを解決するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"npm update -g" の後に "Cannot find module 'npmlog'" というエラーが発生する。
-
[解決済み】passport.js passport.initialize() ミドルウェアが使用されていません。
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] bodyParser は非推奨です express 4
-
[解決済み] Passport JSのreq.isAuthenticated()はどのように実装されていますか?[クローズド]
-
[解決済み] Node.jsで「btoaが定義されていない」エラーが発生する
-
[解決済み] "app.use(express.cookieSession())" に "secret" オプションが必要です。
-
[解決済み] "致命的なエラーです。grunt "コマンドを実行すると、"Unable to find local grunt. "と表示されます。
-
[解決済み] ノードのバージョンを管理するためのnまたはnvm - 各バージョンのグローバルモジュールを保持することは良いアイデアですか?
-
[解決済み] 次の機能を表現する、その本当の目的は?