gpt4 book ai didi

node.js - Apollo Server Express + GraphQL 关系

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:34 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com