首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GraphQL如何在node.js中分离服务器错误和客户端错误(最好使用TryCatch块)?

GraphQL在Node.js中分离服务器错误和客户端错误的实现,通常涉及到对错误类型的判断和处理。GraphQL的错误可以分为两大类:服务器错误(如数据库连接失败、内部逻辑错误等)和客户端错误(如输入验证失败、类型错误等)。这两类错误在GraphQL中都被视为GraphQLError的实例,但可以通过特定的属性来区分它们。

以下是一个使用try-catch块来分离服务器错误和客户端错误的示例:

代码语言:txt
复制
const { ApolloServer, gql } = require('apollo-server');

// 定义GraphQL Schema
const typeDefs = gql`
  type Query {
    hello: String
    divide(a: Int, b: Int): Float
  }
`;

// 定义Resolver
const resolvers = {
  Query: {
    hello: () => 'Hello world!',
    divide: (_, { a, b }) => {
      if (b === 0) {
        throw new Error('Division by zero is not allowed');
      }
      return a / b;
    },
  },
};

// 创建Apollo Server实例
const server = new ApolloServer({
  typeDefs,
  resolvers,
  formatError: (error) => {
    // 这里可以根据error的类型来判断是服务器错误还是客户端错误
    if (error.originalError) {
      // 原始错误通常是服务器错误
      console.error('Server error:', error.originalError);
      return {
        ...error,
        message: 'Internal server error',
        extensions: {
          code: 'INTERNAL_SERVER_ERROR',
        },
      };
    } else {
      // GraphQL错误通常是客户端错误
      console.error('Client error:', error.message);
      return error;
    }
  },
});

// 启动服务器
server.listen().then(({ url }) => {
  console.log(`🚀 Server ready at ${url}`);
});

在上面的代码中,我们定义了一个简单的GraphQL Schema和Resolver。在divide函数中,我们故意抛出一个错误来模拟客户端错误(除数为零)。在Apollo Server的formatError函数中,我们检查错误是否有originalError属性。如果有,这通常意味着有一个服务器端的原始错误(例如,从数据库操作中抛出的错误)。如果没有,这通常是一个GraphQL解析器中抛出的客户端错误。

请注意,这个示例使用了Apollo Server,它是构建GraphQL服务器的流行框架。在实际应用中,你可能需要根据你的项目需求和所使用的GraphQL库来调整错误处理的逻辑。

参考链接:

  • Apollo Server 官方文档: https://www.apollographql.com/docs/apollo-server/
  • GraphQL 官方文档: https://graphql.org/learn/

通过这种方式,你可以有效地在Node.js中分离和处理GraphQL的服务器错误和客户端错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 2019年8大Web开发趋势

    熟悉前端开发的人应该都知道,最近几年,各种前端框架层出不从,H5开发模式也越来越流行,大前端时代也已经到来。每一年各种前端技术也应运而生,快速掌握最新的前端技术也是每一个开发者不可或缺的一门技能。如今也是新的一年的到来,去年,也就是2018年,大家也都知道,很多前端技术已成为大势所趋,比如Node.js,一门可以让Javascript运行在服务端的技术,已经逐渐发展成一个成熟的开发平台,吸引了众多的开发者;又比如三大前端框架Vue.js, AngularJS以及React.js各有特点,各有所长,使用的人也越来越多,还有Stencil,可以为你的所有应用构成一个组件库等等。所有这些新兴的前端技术,使我们的开发越来越方便。今天在这里,我就来给大家谈谈2019年的8个Web开发的趋势,希望能给各位带来一些有用的信息。

    02
    领券