私はNode.jsにRestifyアプリケーションを書いていますRestifyコールバック内のエラーが発生したときに呼び出される関数が必要です。この関数は、クライアントに応答を送信する必要があります。私は約束または非同期機能を使用していない場合は、私はそのような何かを行うことができます。Restifyミドルウェアで未処理のPromise拒否を取得するにはどうすればよいですか?
server.on('uncaughtException', (req, res, route, err) => {
log.error(err);
res.send(err);
});
しかし、私のコールバックがasync
関数の場合、その関数の内部例外が呼び出されていない、とunhandledPromiseRejection
が代わりに発生します。
通常のエラーを処理するのと同じ方法で未処理のPromiseの拒否を処理するように、コードをどのようにリファクタリングすることができますか?
そして、はい、それは
if (!core.validateUUID(req.params.deviceId)) {
throw new Error(`Device ${req.params.deviceId} is wrong`)
}
を書くために簡単です、私はRestifyミドルウェア自体の内部エラーをチェックできることを知っているが、まだそれは、コードが複雑になり、その後
if (!core.validateUUID(req.params.deviceId)) {
return next(new restify.InvalidArgumentError({ body: {
success: false,
error: `Device ${req.params.deviceId} is wrong`,
} }));
}
あなたは "unhandledRejection"イベントを単に聞くことはできませんか? https://nodejs.org/api/process.html#process_event_unhandledrejection –
@MattDiamond私はできますが、私は 'req'と' res'オブジェクトを得ることができません。私は 'res 'エラーの詳細をユーザーに返すオブジェクト – serge1peshcoff