2016-10-19 5 views
3

Ich versuche, einen benutzerdefinierten Fehler mit apollo-server zu verwenden, und es scheint, dass mein benutzerdefinierter Fehler eine Eigenschaft (code) hat, die nicht innerhalb formatError verfügbar ist.Benutzerdefiniertes Fehlerobjekt mit Apollo Server

import ExtendableError from 'es6-error' 

export default class MyError extends ExtendableError { 
    constructor(args) { 
    let code = Object.keys(args)[0] 
    let message = Object.values(args)[0] 
    super(message) 
    this.code = code 
    } 
} 

Ich habe eine einfache Fehlerbehandlung so etwas wie dies funktioniert:

let INVALIDREQUEST = 'invalid request' 
let e = new MyError({INVALIDREQUEST}) 
console.log(e.code) // => "INVALIDREQUEST" 

ich Probleme, bin da, wenn ich error.code log aus formatError es nicht verfügbar ist.

formatError: function (error) { 
    console.log(error.code) // => undefined 
    return error 
} 

Wie kann ich benutzerdefinierte Eigenschaften (wie code) von error aus formatError propagieren?

Antwort

7

Da Apollo Server GraphQL.js verwendet, können wir die Lösung durch das Graben tief dort finden: https://github.com/graphql/graphql-js/blob/44f315d1ff72ab32b794937fd11a7f8e792fd873/src/error/GraphQLError.js#L66-L69

Wesentlichen die GraphQL.js Referenz-Implementierung Fehler in Ihrem Resolvern fängt, und liefert sie an die formatError Funktion, Sie werden jedoch in ein spezielles GraphQL-spezifisches Fehlerobjekt mit den Eigenschaften path, positions und source eingeschlossen.

Sie können den ursprünglichen Fehler finden Sie aus dem Resolver auf dem originalError Feld des error Objekt in formatError warf, etwa so:

formatError: function (error) { 
    console.log(error.originalError.code) 
    return error 
} 
+0

warum Knotenprotokoll unterscheidet sich von graphiql? In graphiql kann ich die Zustände sehen, wenn ich formaterror hinzufüge: error.state = error.originalError; Aber in der Knotenkonsole sehe ich nur: GraphQLError (.. bei locatedError ..) Pfad, Positionen und Quelle. Kann ich in der Konsole auf dem Knoten meine Statuseigenschaft sehen? – stackdave

Verwandte Themen