Отношения Apollo Server Express GraphQL

#node.js #express #mongoose #graphql #apollo

#node.js #экспресс #мангуст #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"
                ]
            }
        ]
    }
}
  

Это мой код typeDef для сайта:

 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 , то получу при компиляции:

Ошибка: тип мутации.addSite(owner:) должен быть типом ввода, но получено: [User]

Мой распознаватель выглядит так:

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

Каков правильный способ определения отношений сегодня? Спасибо.

Ответ №1:

Я только что отредактировал свой распознаватель для этого:

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

    return ownedSites;
}
  

И это решило ошибки.