在对此进行了一段时间的试验后,我意识到缺少一些重要的细节。主要是,如果您有一个带有自定义字段的自定义错误对象,上述示例将允许您读取您的自定义属性,因为似乎自定义错误被转换为Error
只有一个消息属性的标准对象。
这是我的formatError
函数的样子(注意originalError
属性):
app.use('/graphql', auth.verifyAccess, graphqlHTTP((req, res) => {
return {
schema: makeExecutableSchema({
typeDefs: typeDefs,
resolvers: rootResolver
}),
graphiql: true,
formatError: (err) => ({
message: err.originalError.message || err.message,
code: err.originalError.code || 500
}),
}
}));
originalError
道具似乎总是被设置,但作为保障,您可以使用 lodash属性get
。
我有一个定义的自定义错误类,称为APIError
class APIError extends Error {
constructor({ code, message }) {
const fullMsg = `${code}: ${message}`;
super(fullMsg);
this.code = code;
this.message = message;
}
}
export default APIError;
在我的解析器中,我抛出如下异常:
const e = new APIError({
code: 500,
message: 'Internal server error'
});