Что вы должны проверять, когда запрос GraphQL возвращает пустые данные из mongodb?

#node.js #mongodb #api #graphql

Вопрос:

Я пытаюсь перевести api Flask на сервер graphql. Я могу получить пример кода для работы с тестовой коллекцией mongodb, но я не могу заставить свой адаптированный код работать на реальном сервере mongodb. Запрос всегда возвращает пустой ответ на данные. Каковы шаги по отладке этого кода? введите описание изображения здесь

 const Express = require("express");
const { graphqlHTTP } = require('express-graphql');
const Mongoose = require("mongoose");
const {
    GraphQLID,
    GraphQLString,
    GraphQLList,
    GraphQLNonNull,
    GraphQLObjectType,
    GraphQLSchema
} = require("graphql");

var app = Express();

Mongoose.connect("mongodb://localhost/treasure-chess");

//"persons" is the collection 
const GameModel = Mongoose.model("game", {
    black: String,
    white: String
});

const GameType = new GraphQLObjectType({
    //the name field here doesn't matter I guess...
    name: "Game",
    fields: {
        id: { type: GraphQLID },
        black: { type: GraphQLString },
        white: { type: GraphQLString }
    }
});

const schema = new GraphQLSchema({
    query: new GraphQLObjectType({
        name: "Query",
        fields: {
            games: {
                type: GraphQLList(GameType),
                resolve: (root, args, context, info) => {
                    return GameModel.find().exec();
                }
            },
            game: {
                type: GameType,
                args: {
                    id: { type: GraphQLNonNull(GraphQLID) }
                },
                resolve: (root, args, context, info) => {
                    return GameModel.findById(args.id).exec();
                }
            }
        }
    }),
    mutation: new GraphQLObjectType({
        name: "Mutation",
        fields: {
            game: {
                type: GameType,
                args: {
                    firstname: { type: GraphQLNonNull(GraphQLString) },
                    lastname: { type: GraphQLNonNull(GraphQLString) }
                },
                resolve: (root, args, context, info) => {
                    var game = new GameModel(args);
                    return game.save();
                }
            }
        }
    })
});

app.use("/graphql", graphqlHTTP({
    schema: schema,
    graphiql: true
}));


app.listen(3000, () => {
    console.log("Listening at :3000...");
});
 

Доказательство того, что я подключаюсь к нужному документу mongodb:

введите описание изображения здесь

Еще одно доказательство:

введите описание изображения здесь

Я попытался сделать предложение с комментарием только для того, чтобы обнаружить, что результат был пустым…:

                     var results = GameModel.find().exec()
                    results.then(game_info =>{
                        console.log(game_info)
                    })
 

Комментарии:

1. вы должны проверить ответ БД … console.log( GameModel.find().exec() );

2. Привет, спасибо за предложение. Похоже, что ответ бд пуст?

Ответ №1:

Я нашел ответ, попробовав множество различных поисков в stackoverflow. Оказывается, что mongoose.model предполагает, что любой передаваемый вами параметр является единственным и по умолчанию использует его во множественном числе. Так что мне действительно пришлось сдать экзамен:

 const GameModel = Mongoose.model("game", gameSchema, "game");

 

Конечно, большинство людей, вероятно, не столкнутся с этой ошибкой, поскольку они, вероятно, назвали свои коллекции с учетом этого, возможно, есть один странный человек, который хотел использовать другое имя для своей коллекции, ИЛИ множественное число коллекции одно и то же единственное число. Я оставлю это для других, счастливого кодирования!