如何在 graphql 中获取 mongodb 结果


const axios = require('axios');
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
const url = "mongodb://localhost:27017/graphql";
const {
GraphQLObjectType,
GraphQLInt,
GraphQLString,
GraphQLBoolean,
GraphQLList,
GraphQLSchema
} = require('graphql');
// Launch Type
const LaunchType = new GraphQLObjectType({
name: 'Launch',
fields: () => ({
name: { type: GraphQLString },
})
});
// Root Query
const RootQuery = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
launches: {
type: new GraphQLList(LaunchType),
resolve(parent, args) {
return MongoClient.connect(url, (err, client) => {
client.db('graphql').collection('users').find()
});
}
},
}
});
module.exports = new GraphQLSchema({
query: RootQuery
});

在这里我正在尝试连接 graphql - Express - MongoDB

但我认为我的 RootQuery 存在一些问题,我在 res.

我是新手,不知道如何获取数据并返回

请帮我正确连接。请看一看。

这里是如何连接 express-graphql

const express = require('express');
const expressGraphQL = require('express-graphql');
const schema = require('./schema');
const app = express();

app.use(
'/graphql',
expressGraphQL({
schema,
graphiql: true
})
);

在解析中返回连接将其更正为

resolve(parent, args) {
MongoClient.connect(url, (err, client) => {
return  client.db('graphql').collection('users').find()
});
}

您可以返回从解析程序返回值的承诺。在你的例子中,你返回的是一个回调函数,而不是返回内部的承诺。

同样在这里,您将连接到解析器中的数据库,因此您将在每次向 API 发出请求时与数据库连接/断开连接,这不是一个好的做法。 最好连接一次并重复使用连接

const client = await MongoClient.connect(url)
// Root Query
const RootQuery = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
launches: {
type: new GraphQLList(LaunchType),
resolve(parent, args) {
return client.db('graphql').collection('users').find()
});
}
},
}
});
module.exports = new GraphQLSchema({
query: RootQuery
});

最新更新