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

相关内容

热门资讯

开挂辅助工具"拱趴大... 开挂辅助工具"拱趴大菠萝有什么挂"开挂(透视)辅助软件(有挂教学) >>您好:软件加薇1367043...
开挂辅助脚本"pok... 开挂辅助脚本"pokemmo免费脚本"开挂(透视)辅助安装(确实有挂);无需打开直接搜索薇:1367...
开挂辅助插件"wep... wepoker游戏的安装教程是一款专注玩家量身打造的游戏记牌类型软件,在wepoker游戏的安装教程...
开挂辅助插件"红龙p... 开挂辅助插件"红龙poker辅助器免费观看"开挂(透视)辅助脚本(有挂方法);打开点击测试直接进入微...
开挂辅助插件"wep... 您好:这款wepoker有机器人吗游戏是可以开挂的,确实是有挂的,很多玩家在这款wepoker有机器...
开挂辅助安装"wpk... 开挂辅助安装"wpk私人局辅助是真的吗"开挂(透视)辅助插件(了解有挂)1、下载安装好wpk私人局辅...
开挂辅助软件"we ... 开挂辅助软件"we poker辅助器下载"开挂(透视)辅助软件(确实有挂);是一款可以让一直输的玩家...
开挂辅助工具"we-... 开挂辅助工具"we-poker靠谱吗"开挂(透视)辅助安装(有挂辅助)1、下载安装好we-poker...
开挂辅助平台"aap... 大家好,今天小编来为大家解答aapoker ai插件这个问题咨询软件客服可以免费测试直接加微信(13...
开挂辅助神器"wep... 开挂辅助神器"wepoker破解是真的还是假的"开挂(透视)辅助平台(有挂细节)您好:wepoker...