node.js - Apollo Server Express + GraphQL 关系

标签 node.js express mongoose graphql apollo

我正在使用 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) 我看到所有者是一个字符串数组。

编辑:

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

Error: The type of Mutation.addSite(owner:) must be Input Type but got: [User]

我的解析器如下所示:

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

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

最佳答案

我刚刚将我的解析器编辑为:

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

    return ownedSites;
}

这解决了错误。

关于node.js - Apollo Server Express + GraphQL 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55620529/

相关文章:

node.js - Cordova Hook : stop node until promise finished

node.js - Cordova运行ubuntu不工作

javascript - Discord.js 获取所有成员并分别标记它们

node.js - 如何在IIS上的nodeJS中获取客户端ip

node.js - Mongoosejs 创建后保存

mysql - 在开始时间前 15 分钟获取所有类(class)

node.js - 每个路由的 Node Express 特定超时值

node.js - 无法使用express js在mongodb中一次$push和$set数据

node.js - MongoDB - 在父文档中填充 GridFS 文件元数据

node.js - 无法确定 Mongoose SSL 与 DocumentDB 的连接错误