Graphql-从连接的数据库调用Graphql中的查询
我刚开始使用graphql,在操场上调用基本查询时遇到了一些问题 我有一个server.jsGraphql-从连接的数据库调用Graphql中的查询,graphql,apollo-server,Graphql,Apollo Server,我刚开始使用graphql,在操场上调用基本查询时遇到了一些问题 我有一个server.js const mongoose = require('mongoose'); require('dotenv').config({ path: 'variables.env' }) const { ApolloServer } = require('apollo-server') //Monogoose schemas const Recipe = require('./models/Recipe')
const mongoose = require('mongoose');
require('dotenv').config({ path: 'variables.env' })
const { ApolloServer } = require('apollo-server')
//Monogoose schemas
const Recipe = require('./models/Recipe');
const { typeDefs } = require('./schema');
const { resolvers } = require('./resolvers')
const server = new ApolloServer({
typeDefs,
resolvers
})
// Connect to DB
mongoose
.connect(process.env.MONGO_URI, { autoIndex: false })
.then(() => {
console.log('DB connected')
})
.catch(err => console.error(err))
server.listen().then(({ url }) => {
console.log(`server listening on ${url}`)
})
一个schema.js
const gql = require('graphql-tag');
exports.typeDefs = gql`
type Recipe{
_id: ID
name: String!
category: String!
description: String!
instructions: String!
createdDate: String
likes: Int
username: String
}
type Query {
getAllRecipes: [Recipe]
}
`
a resolvers.js
exports.resolvers = {
Query: {
getAllRecipes: async (root, args, { Recipe }) => {
const allRecipes = await Recipe.find()
return allRecipes
}
},
和猫鼬模式
const mongoose = require('mongoose');
const Schema = mongoose.Schema
const RecipeSchema = new Schema({
name: {
type: String,
required: true
},
category: {
type: String,
required: true
},
description: {
type: String,
required: true
},
instructions: {
type: String,
required: true
},
createdDate: {
type: Date,
default: Date.now
},
likes: {
type: Number,
default: 0
},
username: {
type: String
}
})
module.exports = mongoose.model('Recipe', RecipeSchema)
服务器和到DB的连接工作,当我打开游乐场时,会显示模式。我在数据库里有数据
运行查询时:
query{
getAllRecipes{
name
}
}
我收到一个错误“无法读取未定义的属性'find'”,
任何人都能看到我做错了什么。在您的
resolvers.js
文件中,您希望配方
来自上下文
参数,但您没有根据我从您的代码片段中可以看出的地方添加它
在ApolloServer实例初始化期间,您可以传递一个上下文
属性,该属性将注入所有解析程序:
。。。
const server=新服务器({
typeDefs,
解析器,
背景:{
配方
},
});
context
属性也可以是一个函数,它在末尾返回一个对象,以防需要更详细的内容
有关该选项以及您可以传递的其他选项的详细信息,请参阅: