React-Apollo错误仅显示状态码500

时间:2019-03-22 12:14:17

标签: reactjs graphql apollo react-apollo

我想知道如何使用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'

2 个答案:

答案 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始终是编程错误,应在服务器上修复。在使用查询中传递的参数之前,您的服务器似乎没有执行所需的验证。