エラーにクラス階層を使用しているNode.js/CoffeeScriptアプリを開発しています。throw
ルートハンドラーのルートでステートメントを使用している場合、すべてがうまく機能します。
class APIError extends Error
constructor: ->
app.error (err, req, res, next) ->
if err instance of APIError
console.log 'APIError captured'
app.get '/', (req, res, next) ->
throw new APIError
ただし、Mongooseではthrow
、コールバック関数でステートメントを使用します。
app.get '/', (req, res, next) ->
UserModel.where('name', 'Joe').findOne (err, doc) ->
throw new APIError
結果は
/usr/local/lib/node_modules/mongoose/lib/utils.js:413
throw err;
^
Error:
next()
代わりに電話すると
app.get '/', (req, res, next) ->
UserModel.where('name', 'Joe').findOne (err, doc) ->
return next new APIError
または、ハンドラーの本体で使用することもできます。
app.get '/', (req, res, next) ->
next new APIError
undefined
コンソールに印刷されます。
最後のステートメントをreturn next Error
期待どおりに機能するように変更します。つまり、例外スタックトレースがコンソールに出力されます。
app.get '/', (req, res, next) ->
return next Error 'This works as expected'
それはNode.jsの問題ですか、それともCoffeeScriptでクラスを定義する方法ですか?このようなエラー階層を機能させる方法はありますか?
アップデート1
これがCoffeeScriptのクラスの実装方法であることを確認できます。標準のJSプロトタイプチェーン定義を使用すると問題は解決しますが、正しくないと感じます。