Попробуем GraphQL впервые, и я бы хотел, чтобы один тип схемы имел доступ к массиву объектов в другом типе схемы.Я использую локальные данные и lodash, чтобы проверить это, прежде чем подключить его к MongoDB.Я получаю несколько ошибок относительно моих попыток сделать это.Я знаю, что я рядом.Любая помощь будет оценена.
Следующее было моей последней попыткой.Я получил доступ к GraphQLList с помощью express-graphql и использовал GraphQLID для доступа ко второй схеме.
schema.js
var projects = [
{
name: "Title 1",
subtitle: "Subtitle 1",
summary: "Lorem ipsum....",
languageId: ["4", "2"],
id: "1"
},
...
var languages = [
{ name: "Javascript", id: "1" },
{ name: "HTML", id: "2" },
{ name: "CSS", id: "3" },
{ name: "Python", id: "4" },
]
...
const ProjectType = new GraphQLObjectType({
name: 'Project',
fields: () => ({
id: { type: GraphQLID },
name: { type: GraphQLString },
subtitle: { type: GraphQLString },
summary: { type: GraphQLString },
languages: {
type: new GraphQLList(GraphQLID),
resolve(parent, args) {
console.log(parent)
return _.find(languages, { id: parent.languageId })
}
}
})
});
const LanguageType = new GraphQLObjectType({
name: 'Language',
fields: () => ({
id: { type: GraphQLID },
name: { type: GraphQLString },
})
});
//Root Queries
const RootQuery = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
project: {
type: ProjectType,
args: { id: { type: GraphQLID } },
resolve(parent, args) {
return _.find(projects, { id: args.id });
}
},
language: {
type: LanguageType,
args: { id: { type: GraphQLID } },
resolve(parent, args) {
return _.find(languages, { id: args.id })
}
}
}
});
Намерение состояло в том, чтобы вызвать списокязыки, используемые в этом проекте в Graphiql, которые выглядели бы примерно так ...
{
"data": {
"project": {
"name": "Project 1"
languages{
names{
"Python"
"HTML"
}
}
}
}
}
Вместо этого я получаю следующее ...
{
"errors": [
{
"message": "Syntax Error: Expected Name, found }",
"locations": [
{
"line": 7,
"column": 7
}
]
}
]
}
Я переформатировал решение в hardзакодировать массив языков, и это работает, но это не работает.Любые предложения будут ценны.Спасибо всем за ваше время.