mirror of
https://github.com/toeverything/AFFiNE.git
synced 2024-12-12 06:43:24 +03:00
26db1d436d
standardize the error raising in both GraphQL Resolvers and Controllers. Now, All user aware errors should be throwed with `HttpException`'s variants, for example `NotFoundException`. > Directly throwing `GraphQLError` are forbidden. The GraphQL errorFormatter will handle it automatically and set `code`, `status` in error extensions. At the same time, the frontend `GraphQLError` should be imported from `@affine/graphql`, which introduce a better error extensions type. ---- controller example: ```js @Get('/docs/${id}') doc() { // ... // imported from '@nestjs/common' throw new NotFoundException('Doc is not found.'); // ... } ``` the above will response as: ``` status: 404 Not Found { "message": "Doc is not found.", "statusCode": 404, "error": "Not Found" } ``` resolver example: ```js @Mutation() invite() { // ... throw new PayloadTooLargeException('Workspace seats is full.') // ... } ``` the above will response as: ``` status: 200 Ok { "data": null, "errors": [ { "message": "Workspace seats is full.", "extensions": { "code": 404, "status": "Not Found" } } ] } ``` for frontend GraphQLError user-friend, a helper function introduced: ```js import { findGraphQLError } from '@affine/graphql' fetch(query) .catch(errOrArr => { const e = findGraphQLError(errOrArr, e => e.extensions.code === 404) if (e) { // handle } }) ``` |
||
---|---|---|
.. | ||
server | ||
storage |