Я только пачкаю руки с GraphQL, используя Express.Я слежу за серией Academind YouTube для GraphQL-Express-Node-React .Я только что установил базовую схему GraphQL, где у меня есть жестко заданный массив строк, который возвращается.Я хочу создать Запрос, который дает мне индекс элемента из этого жестко закодированного массива, используя GraphQL (graphiql
)
Код
const express = require('express'); // Add Express Module
const bodyParser = require('body-parser'); // Add Body-Parser Middleware for JSON handling in Requests
const graphqlHttp = require('express-graphql'); // Add Middleware for GraphQL Resolvers over Express HTTP
const { buildSchema } = require('graphql'); // Javascript Object-Destructuring (pull objects from packages)
const app = express();
app.use(bodyParser.json()); // JSON parsing Middleware added
app.use('/graphql', graphqlHttp({
schema: buildSchema(`
type RootQuery {
events: [String!]!
getEventIndex(eventName: String): Int
}
type RootMutation {
createEvent(name: String): String
}
schema {
query: RootQuery
mutation: RootMutation
}
`),
rootValue: {
events: () => {
return ['Cooking', 'All-Night Coding', 'Romantic'];
},
getEventIndex: (args) => {
const _arr = ['Cooking', 'All-Night Coding', 'Romantic'];
const index = _arr.findIndex(args.eventName);
return index;
},
createEvent: (args) => {
const eventName = args.name; // same as that of the parameter for `createEvent`
return eventName;
}
},
graphiql: true
}));
app.listen(3000);
Я создал запрос getEventIndex(eventName: String): Int
, который принимаетв имени события и предоставляет мне индекс (который является целым числом)
Результат в graphiql
запрос
query {
getEventIndex(eventName: "Cooking")
}
результат
{
"errors": [
{
"message": "Cooking is not a function",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"getEventIndex"
]
}
],
"data": {
"getEventIndex": null
}
}
Почему Cooking
здесь следует рассматривать как function
, а не как аргумент в createEvent
мутации?
Конечно, я прыгаю в GraphQL без особого углубления в его Спецификации, но я думаю, что он также способен обрабатывать запросы на основе параметров.