Ich bin sehr neu in GraphQL und versuchen zu verstehen, wie man 1 Datensatz von Abfrage erhalten.Wie bekomme ich 1 Datensatz von einer Liste in GraphQL
Dies ist das Ergebnis meiner aktuellen Abfrage:
{
"data": {
"todos": null
}
}
Ich bin nicht sicher, was falsch ist. Ich möchte das Ergebnis dieser sein:
{
"data": {
"todos": {
"id": 1,
"title": "wake up",
"completed": true
}
}
}
Hier ist mein Code, die ich geschaffen habe, wie ich versuche, GraphQL zu lernen.
schema.js:
var graphql = require('graphql');
var TODOs = [
{
"id": 1,
"title": "wake up",
"completed": true
},
{
"id": 2,
"title": "Eat Breakfast",
"completed": true
},
{
"id": 3,
"title": "Go to school",
"completed": false
}
];
var TodoType = new graphql.GraphQLObjectType({
name: 'todo',
fields: function() {
return {
id: {
type: graphql.GraphQLID
},
title: {
type: graphql.GraphQLString
},
completed: {
type: graphql.GraphQLBoolean
}
};
}
});
var queryType = new graphql.GraphQLObjectType({
name: 'Query',
fields: function() {
return {
todos: {
type: new graphql.GraphQLList(TodoType),
args: {
id: { type: graphql.GraphQLID }
},
resolve: function (source, args, root, ast) {
if (args.id) {
return TODOs.filter(function(item) {
return item.id === args.id;
})[0];
}
return TODOs;
}
}
}
}
});
module.exports = new graphql.GraphQLSchema({
query: queryType
});
index.js:
var graphql = require ('graphql').graphql;
var express = require('express');
var graphQLHTTP = require('express-graphql');
var Schema = require('./schema');
var query = 'query { todos(id: 1) { id, title, completed } }';
graphql(Schema, query).then(function(result) {
console.log(JSON.stringify(result,null," "));
});
var app = express()
.use('/', graphQLHTTP({ schema: Schema, pretty: true }))
.listen(8080, function (err) {
console.log('GraphQL Server is now running on localhost:8080');
});
diesen Code auszuführen ich nur node index
aus dem Stammverzeichnis ausführen. Wie kann ich einen bestimmten Datensatz erhalten, der von der Datensatz-ID zurückgegeben wird?
Danke! Ist es üblich, verschiedene Felder für Listen und für einen einzelnen Wert in der Liste zu erstellen? Zum Beispiel ein Todos-Feld mit einem Resolver, der eine Liste zurückgibt, und ein Todo-Feld mit einem Resolver, der ein einzelnes Element aus der Liste zurückgibt. – Mdd
Ja, im Allgemeinen, wenn Sie möchten, dass verschiedene Datentypen zurückgegeben werden, müssen Sie verschiedene Felder dafür angeben. Auf diese Weise können Sie sicher sein, dass dieselbe Abfrage immer dieselbe Form von Daten zurückgibt, auch wenn die Argumente unterschiedlich sind. – stubailo