ApolloServer联合解析器:如何优雅地处理实体未找到?
创始人
2024-09-09 13:01:03
0

在联合解析器中,我们可能需要查询多个子服务来获取所需的数据。当其中一个子服务未能找到所需的实体时,我们需要优雅地处理该情况,并且不应该向客户端返回错误。以下是一种解决方案:

假设我们有两个子服务,一个服务用于查询用户,另一个服务用于查询订单。我们需要查询用户的所有订单。

首先,在子服务中定义一个自定义错误类型:

import { ApolloError } from 'apollo-server-errors';

export class UserNotFoundError extends ApolloError {
  constructor() {
    super('User not found', 'USER_NOT_FOUND');
  }
}

然后在联合解析器中使用此错误类型,如下所示:

const resolvers = {
  Query: {
    user: async (_, { id }, { dataSources }) => {
      const userData = await dataSources.userAPI.getUserById(id);

      if (!userData) {
        throw new UserNotFoundError();
      }

      return userData;
    },
  },

  User: {
    orders: async (user, _, { dataSources }) => {
      const orderData = await dataSources.orderAPI.getOrdersByUserId(user.id);

      return orderData;
    },
  },

  // ...
};

现在,如果用户未找到,将引发UserNotFoundError。在根据“User”定义订单解析器时,我们可以使用内容协商机制处理此错误类型:

const { ApolloServer } = require('apollo-server');
const { ApolloError, toApolloError } = require('apollo-server-errors');
const { buildFederatedSchema } = require('@apollo/federation');

const resolvers = {
  // ...

  User: {
    orders: async (user, _, { dataSources }) => {
      try {
        const orderData = await dataSources.orderAPI.getOrdersByUserId(user.id);

        return orderData;
      } catch (error) {
        if (error instanceof ApolloError) {
          throw error;
        }

        const notFoundError = new UserNotFoundError();
        throw toApolloError(notFoundError

相关内容

热门资讯

七分钟了解!Wepoke必胜(... 七分钟了解!Wepoke必胜(wepokE)外挂透明挂辅助工具(辅助挂)曝光教程(确实有挂)-哔哩哔...
专业讨论(云扑克苹果)外挂透明... 专业讨论(云扑克苹果)外挂透明挂辅助工具(透视)软件透明挂(有挂神器)-哔哩哔哩;大神普及一款德州a...
教程辅助(wpk猫腻)外挂透明... 教程辅助(wpk猫腻)外挂透明挂辅助神器(辅助挂)原来真的有挂(2020已更新)(哔哩哔哩);原来确...
重大消息(扑克世界)外挂透明挂... WePoker透视辅助版本解析‌,重大消息(扑克世界)外挂透明挂辅助器安装(透视)透视辅助(有挂解密...
总算了解!德州数据(WepOk... 您好,德州数据这款游戏可以开挂的,确实是有挂的,需要了解加微【285696317】很多玩家在这款游戏...
科普常识(wpk规律)外挂透明... 1、科普常识(wpk规律)外挂透明挂辅助挂(透视)辅助透视(有挂规律)-哔哩哔哩。2、wpk规律透视...
辅助透视(微扑克透明挂)外挂透... 辅助透视(微扑克透明挂)外挂透明挂辅助插件(辅助挂)果真真的有挂(2024已更新)(哔哩哔哩)微扑克...
一分钟了解(wpk德州)外挂透... 一分钟了解(wpk德州)外挂透明挂辅助器安装(辅助挂)发牌规律(有挂透明挂)-哔哩哔哩,支持语音通讯...
透视透明(Wepoke针对)外... Wepoke针对新手教程相关信息汇总(需添加指定薇757446909获取下载链接);透视透明(Wep...
普及知识!wpk后台(wepo... 普及知识!wpk后台(wepoke)外挂透明挂辅助挂(辅助挂)存在挂教程(讲解有挂)-哔哩哔哩准备好...