【问题标题】:Apollo Server Express + GraphQL relationshipsApollo Server Express + GraphQL 关系
【发布时间】:2019-09-01 09:11:46
【问题描述】:

我正在使用 Express + Apollo Server + GraphQL + Mongoose + MongoDB 在数据库上“执行”几个 CRUD 操作。

我正在尝试进行的操作之一是从数据库中获取站点并使用每个记录的信息扩展其用户,如下所示:

query {
    getSites {
        id
        name
        owner {
            name
            email
        }
        origins
    }
}

相反,我得到了这些结果:

{
    "data": {
        "getSites": [{
                "id": "5cae36182ab9b94e94ba9af5",
                "name": "Test site 1",
                "owner": [{
                        "name": null,
                        "email": null
                    }
                ],
                "origins": [
                    "test1",
                    "test2"
                ]
            }, {
                "id": "5cae3a3798c302247c036544",
                "name": "Test site 2",
                "owner": [{
                        "name": null,
                        "email": null
                    }
                ],
                "origins": [
                    "test1",
                    "test2"
                ]
            }
        ]
    }
}

这是我的 SitetypeDef 代码:

import { gql } from 'apollo-server-express';

const site = gql `
    extend type Site {
        id: ID!
        name: String!
        origins: [String]
        owner: [User]
        createdOn: String
        updatedOn: String
    }

    extend type Query {
        getSites: [Site]
        getSite(id: ID!): Site
    }

    extend type Mutation {
        addSite(name: String!, owner: [String!], origins: [String]): Site
    }
`;

export default site;

如果我 console.log(sites) 我看到 owner 是一个字符串数组。

编辑

如果我更改addSite(name: String!, owner: [User], origins: [String]): Site,那么我会在编译时得到:

错误:Mutation.addSite(owner:) 的类型必须是 Input Type 但得到:[User]

我的解析器如下所示:

getSites: async () => await Site.find().exec()

今天定义关系的正确方法是什么?谢谢。

【问题讨论】:

    标签: node.js express mongoose graphql apollo


    【解决方案1】:

    我刚刚编辑了我的解析器:

    getSites: async () => {
        let sites = await Site.find().exec();
        let ownedSites = await User.populate(sites, { path: 'owner' });
    
        return ownedSites;
    }
    

    这解决了错误。

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 1970-01-01
      • 2019-09-14
      • 2020-03-08
      • 2020-02-23
      • 2022-11-09
      • 2018-10-21
      • 2019-11-10
      • 2017-09-01
      相关资源
      最近更新 更多