【发布时间】:2020-10-15 12:28:15
【问题描述】:
我对 GraphQL 有点陌生,所以,我仍然在脑海中将所有活动部分拼凑在一起。
在我的服务器端,我使用TypeGraphQL,它使用class-validator 来验证传入的查询。在客户端,我使用的是中继。当验证失败时,我在 Relay 中的 commitMutation 调用调用 onError 并传递错误的字符串表示,但来自服务器的实际响应如下所示:
{
"errors": [
{
"message": "Argument Validation Error",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"updateCurrentUser"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"validationErrors": [
{
"target": {
"name": "ueoa",
"nickname": "ueoa",
"email": ""
},
"value": "",
"property": "email",
"children": [],
"constraints": {
"isEmail": "email must be an email"
}
}
],
"stacktrace": [
"Error: Argument Validation Error",
" at Object.validateArg (C:\\Users\\pupeno\\Documents\\Flexpoint Tech\\imok\\node_modules\\type-graphql\\dist\\resolvers\\validate-arg.js:24:15)",
" at runMicrotasks (<anonymous>)",
" at processTicksAndRejections (internal/process/task_queues.js:97:5)",
" at async Promise.all (index 0)"
]
}
}
}
],
"data": null
}
在这种情况下,我将电子邮件留空,因此在 errors[0].extensions.exception.validationErrors[0].constraints.isEmail 上出现错误:“电子邮件必须是电子邮件”。
Relay 有没有办法让我访问这个结构来将这个错误转化为用户的 UI 错误?或者这些错误是否相当于 500,我应该实现自己的单独错误处理(相当于 401)?
我的大部分验证都是在客户端上完成的,但唯一性只能在服务器上完成,我正在尝试找出两者之间的协议。
【问题讨论】:
标签: graphql relay typegraphql