2016-05-12 3 views
1

Gibt es eine Möglichkeit, ein Error Objekt mithilfe einer JavaScript-Factory zu erstellen, ohne die Linie aus der Factory in den Stapel aufzunehmen?Erste Zeile des Fehlerstapels im Knoten ausschließen?/Benutzerdefinierter Fehler Geben Sie Knoten ein?

Zum Beispiel dieses:

if (!member) { 
    return next(errs.init('Invalid email address.', errs.UNAUTHORIZED)); 
} 

... erzeugt dies:

Error: Invalid email address. 
    at Object.init (/.../bin/utils/errors.util.js:21:16) 
    at Query.<anonymous> (/.../routes/auth/auth.routes.js:37:30) 
    at /.../node_modules/kareem/index.js:177:19 
    at /.../node_modules/kareem/index.js:109:16 
    at nextTickCallbackWith0Args (node.js:419:9) 

Die erste Zeile des Stapels ist eigentlich eine Zeile aus der Fabrik. Das eigentliche Problem beginnt in der zweiten Zeile des Stapels.

Ich verwende WebStorm und das Konsolenfenster zeigt nur die erste Zeile des Stapels. Sie müssen blättern, um zu den zusätzlichen Zeilen zu gelangen.

+0

Erfassen Sie den Fehler, bevor es ausgelöst wird, und entfernen Sie einfach den fehlerhaften Teil der Fehlermeldung Zeichenfolge? Das scheint mehr Ärger zu sein als es wert ist - Sie wollen den Produktionscode nicht ändern, nur damit er in Ihrer IDE gut aussieht. –

+0

Ich habe nie gesagt, dass ich es ändern wollte. Suchen Sie einfach nach einer Technik, um zu zeigen, wo der tatsächliche Fehler statt der Fabrik liegt. –

+0

Was ist der Wert der Fabrik hier? 'neuen Fehler werfen ('derp')' scheint schnell genug. –

Antwort

1

Waren in der Lage, um es durch Überschreiben des Kontextes in einem benutzerdefinierten Fehler in Knoten zu arbeiten:

function ApiError (message, status, context) { 

    this.name = 'ApiError'; 

    this.message = message || ''; 
    this.status = status || 500; 

    Error.captureStackTrace(this, (context || ApiError)); 
} 
require('util').inherits(ApiError, Error); 

function init (message, status) { 
    return (new ApiError(message, status, init)); 
} 

module.exports = { 

    init   : init, 
    ApiError  : ApiError, 

    BAD_REQUEST  : 400, 
    UNAUTHORIZED : 401, 
    FORBIDDEN  : 403, 
    NOT_FOUND  : 404, 
    CONFLICT  : 409 
}; 

Dies ermöglicht entweder:

return next(errs.init('Invalid email address.', errs.UNAUTHORIZED)); 

... oder ...

return next(new errs.ApiError('Invalid email address.', errs.UNAUTHORIZED)); 
Verwandte Themen