1
GraphQLの新機能で、クエリからレコードを1つ取得する方法を理解しようとしています。GraphQLのリストからレコードを1つ取得する方法
{
"data": {
"todos": null
}
}
私が間違っているのかわからないです:
これが私の現在のクエリの結果です。ここで
{
"data": {
"todos": {
"id": 1,
"title": "wake up",
"completed": true
}
}
}
は私がGraphQLを学ぼうとして私が作成した私のコードです:私は、結果はこのようにしたいと思います。
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');
});
私はルートディレクトリからnode index
実行し、このコードを実行します。レコードIDによって返される特定のレコードを取得するにはどうすればよいですか?
ありがとうございます!リストとリスト内の単一の値に対して異なるフィールドを作成するのが一般的ですか?たとえば、リストを返すリゾルバを持つ 'todos'フィールドと、リストから単一のアイテムを返すリゾルバを持つ' todo'フィールドはありますか? – Mdd
はい、一般に、さまざまなタイプのデータを返すものが必要な場合は、別のフィールドを宣言する必要があります。こうすることで、引数が異なる場合でも、同じクエリが常に同じ形状のデータを返すことが保証されます。 – stubailo