私はエラーを拡張することによりHTTPError
クラスを作成してみました:es6にはErrorから継承し、コンストラクタをスタックトレースに持たない方法はありますか?
class HTTPError extends Error {
constructor(codeArg, message){
let code = codeArg || 500;
super(message || http.STATUS_CODES[code]); // first line in stack trace
this.code = code;
}
}
これは主に正常に動作しますが、私はこのようなエラーをthrow
とき、super
が呼び出された行は、スタックトレースの最初の行である(と仮定nodejs):
> const HTTPError = require('./HTTPError')
undefined
> let e = new HTTPError(418)
undefined
> throw e
Error: I'm a teapot
at HTTPError (/home/pat/Scripts/js/HTTPError.js:6:6)
at repl:1:9
at sigintHandlersWrap (vm.js:32:31)
at sigintHandlersWrap (vm.js:96:12)
at ContextifyScript.Script.runInContext (vm.js:31:12)
at REPLServer.defaultEval (repl.js:308:29)
at bound (domain.js:280:14)
at REPLServer.runBound [as eval] (domain.js:293:12)
at REPLServer.<anonymous> (repl.js:489:10)
at emitOne (events.js:101:20)
> e.code
418
スタックトレースの最初の行はHTTPError
のコンストラクタです。興味深いもの(作成されたもの)は、第2のrepl:1:9
行です。これを回避する方法はありますか?
「Error.captureStackTrace」が問題を解決しました。しかし、それは第2引数として 'HTTPError'でなければなりません。 –
@ PatrickJ.S。 'new HTTPError'を呼び出すと、' new.target'は 'HTTPError'ですが、自動的にサブクラスを参照します – Bergi
ああ、' new.target'が現在のノードで安定していないためです6.x、それは)。 –