我想知道如何使用react-apollo在前端访问投掷错误?
我用于获取单个客户的简单解析器是这样的,其中args._id
是客户ID。现在,如果ID无效,则react-apollo只会引发500错误。
错误!网络错误:响应失败:收到状态码 500
customer: async (args, req) => {
const validateId = (id) => {
return mongoose.Types.ObjectId.isValid(id)
}
if(args._id && validateId(args._id)){
try {
const customer = await Customer
.findById(args._id)
return transformCustomer(customer)
}
catch (err) {
throw err
}
}
else {
throw new Error("error")
}
},
我尝试使用errorPolicy =“ all”并访问error.graphQLErrors,但这不起作用,因为它会引发500错误。
无法读取未定义的属性'graphQLErrors'
答案 0 :(得分:1)
编辑(除了包装在try / catch中)-也许您应该在向服务器发送请求之前检查_id是否有效:
customer: async (args, req) => {
// do some validation on _id
if (args._id && isValid(args._id) ) {
try {
const customer = await Customer.findById(args._id)
} catch (e) {
// handle server error
}
} else {
// handle invalid _id here
}
答案 1 :(得分:0)
要捕获由apollo引发的错误,您需要将执行查询的调用包装到try
-catch
中。
在您的示例中,这可能是:
try {
const customer = await Customer.findById(args._id);
} catch(err) {
// handle the error
}
但是500
始终是编程错误,应在服务器上修复。在使用查询中传递的参数之前,您的服务器似乎没有执行所需的验证。