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真的有挂!aapo... wepoke真的有挂!aapoker怎么进俱乐部,(Wpk)从前存在有挂(详细辅助wepoke教程)...
透视有挂(wepoke插件)微... 一、wepoke插件简介了解软件请加微:136704302wepoke插件是一款在线扑克游戏平台,玩...
德州免费辅助神器app!wpk... 1、德州免费辅助神器app!wpk微扑克真的有辅助插件吗,(wEpoke)最初有挂(详细透视系统教程...
透视透视(aapoker辅助工... 透视透视(aapoker辅助工具)aa扑克辅助(详细辅助技巧教程)一直有挂1、构建自己的微扑克辅助插...
微扑克全自动机器人!德扑ai助... 微扑克全自动机器人!德扑ai助手软件,(德州aa扑克)起初真的有挂(详细辅助介绍教程);实战中需综合...
透视新版(微扑克ai辅助器苹果... 透视新版(微扑克ai辅助器苹果版)wepoke软件规律(详细辅助系统教程)原本是真的有挂是一款可以让...
aapoker透视辅助!好运大... 1、aapoker透视辅助!好运大菠萝有挂吗,(德州机器人)起初是真的有挂(详细辅助第三方教程)。2...
透视辅助(德扑ai助手)wpk... 透视辅助(德扑ai助手)wpk线上打法教学(详细辅助德州论坛)往昔是有挂是一款可以让一直输的玩家,快...
wepokeai代打!wpk ... wepokeai代打!wpk 辅助工具,(wpk德州)先前存在有挂(详细辅助科技教程)是由北京得we...
透视挂透视(德扑ai智能)we... 您好,德扑ai智能这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款...