You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Resolver在GraphQL查询中添加动态字段fullName?

问题

我有如下静态书籍数据:

// books.json
[
  {
    "id": 1,
    "name": "Gullivers Travels"
  },
  {
    "id": 2,
    "name": "Lowland"
  }
]    

当前的GraphQL类型定义如下:

// typedefs.js
import { gql } from "apollo-server";

const typeDefs = gql`
  # type book is defined
  type Book {
    id: String!
    name: String!
    fullName: String
  }

  type Query {
    getAllBooks: [Book!]!
  }  
`;

export { typeDefs };

我希望查询返回的fullName字段是id与name的拼接结果(格式如"1-Gullivers Travels"),示例返回结果如下:

[
  {
    "id": 1,
    "name": "Gullivers Travels",
    "fullName": "1-Gullivers Travels"
  },
  {
    "id": 2,
    "name": "Lowland",
    "fullName": "2-Lowland"
  }
]    

请问是否可以通过Resolver实现该需求?我使用的是Node.js搭配apollo-server。

解决方案

完全可以通过Resolver实现这个需求,具体步骤如下:

  1. 编写Resolver函数
    针对Book类型的fullName字段,编写Resolver来拼接id和name,同时实现Query中的getAllBooks读取静态数据:
// resolvers.js
import books from './books.json';

const resolvers = {
  Book: {
    // parent参数对应每个Book对象的原始数据
    fullName: (parent) => `${parent.id}-${parent.name}`
  },
  Query: {
    getAllBooks: () => books
  }
};

export { resolvers };
  1. 关联Resolver与TypeDefs到ApolloServer
    在服务入口文件中,将typeDefs和resolvers同时传入ApolloServer实例:
// index.js
import { ApolloServer } from 'apollo-server';
import { typeDefs } from './typedefs.js';
import { resolvers } from './resolvers.js';

const server = new ApolloServer({ typeDefs, resolvers });

server.listen().then(({ url }) => {
  console.log(`🚀 Server ready at ${url}`);
});
  1. 验证效果
    启动服务后,执行如下GraphQL查询:
query {
  getAllBooks {
    id
    name
    fullName
  }
}

即可得到包含拼接后fullName字段的预期结果。

内容的提问来源于stack exchange,提问作者Anijit Sau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 13:24:24