-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
获取egg-graphql中业务代码抛出的异常 #3064
Comments
使用try……catch也无法捕获吗?请问目前你的代码是? |
单独对出错代码try catch是可以捕获的,想要在外层统一拦截。 |
萌新同问,如果想要在做统一封装拦截有什么方案吗。现在发现graphql的报错不会走到egg-error的拦截中,(即使是代码层面的报错)也会被统一拦截到了前端,只能一个个去加try...catch。 |
如果是egg-graphql 2.0以下版本,可以将插件中间件复制到项目下修改,覆盖插件里的中间件,具体修改配置graphqlKoa时带上formatError,在formatError中做错误的统一处理。 |
首先感谢大佬回复,不过这里提到的formateError只能在定义server的时候定义能否具体描述一下呢。我看源码里面是直接引用了graphql的方法来进行报错,好像并没有提供出定义的位置...以及这样做怎样和resetApi时的报错中间件能结合起来使用也是比较疑惑的点 |
egg-egg-graphql 1.x版本egg-egg-graphql 1.x版本对应的apollo-server-koa是1.x,下面是apollo-server-koa 1.x的官方demo:
如果要增加错误统一处理:
egg-egg-graphql 1.x插件中间件的使用是
这样没有办法直接传 formateError 参数。 所以我才说
egg-egg-graphql 2.x版本egg-egg-graphql 2.x版本对应的apollo-server-koa是2.x,下面是apollo-server-koa 2.x的官方demo:
如果要增加错误统一处理:
egg-egg-graphql 2.x插件中间件的使用是
这里的 graphqlKoa 即使传入 formateError 参数也没办法了。 对于“怎样和resetApi时的报错中间件能结合起来使用” |
感谢回复, so噶 抱歉最近有点太忙了 一直没上来看。大佬解释得非常清晰,算是理清了很多疑惑非常感谢!! |
我把这个 formateError 透出一下 |
eggjs/egg-graphql#24 一直没有进展吗? @jtyjty99999 |
egg中有两个地方可以捕捉egg-graphql的解析错误或者内部错误。
exports.middleware = ['errorHandler','graphql'];
exports.onerror = {
all(err, ctx){
if(ctx.request.url.indexOf('/graphql')>-1 && ctx.response.status !== 200){
// console.log('捕获住了gql错误');
ctx.set({
"Content-Type": "application/json"
});
ctx.status = 200;
ctx.body = JSON.stringify({
data:null,
message:'gql解析错误',
success: false
});
}
else{
ctx.status = 400;
ctx.body = 'error';
}
}
} |
我很高兴自己解决了这个问题,在这里分享一下。 标题中说捕获graphql中业务代码的异常,而自己的业务代码都是写在resolver中的,也就是说,如果可以在resolver执行前首先执行类似 所有resolver都可以在 不仅如此,我还把它扩展成了类似中间件一样的机制,这样就可以有更多的玩法。 请参考下面项目的README介绍中的 resolver中间件 章节 |
发现graphql请求触发的业务逻辑所抛出的异常都被捕获了,不知道如何获取Error对象,控制台和相关日志找了一圈也没看到。
有什么办法能够获取这些Error么?
The text was updated successfully, but these errors were encountered: