![](/img/trans.png)
[英]Error: Expected undefined to be a GraphQL schema on hello world
[英]Error: Expected undefined to be a GraphQL schema
我收到一条错误消息,上面写着“错误:预期未定义为 GraphQL 架构。” 当我移动到 localhost:3000/graphiql 时请检查这是什么问题它显示了上述错误。 也许我做错了请任何人检查并在可能的情况下帮助我。
我的服务器.js
const express = require ('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
//importing the Schema
const Story = require('./models/Story');
const User = require('./models/Story');
//Bring in GraphQl-Express middleware
const { graphiqlExpress, graphqlExpress } = require('apollo-server-express');
const { makeExecutableSchema } = require('graphql-tools');
const { resolvers } = require('./resolvers');
const { typeDefs } = require('./schema');
//create schema
const Schema = makeExecutableSchema({
typeDefs,
resolvers
})
require('dotenv').config({ path: 'variables.env' });
// connecting mongoose to database
mongoose
.connect(process.env.MONGO_URI)
.then(()=> console.log('DB Connected'))
.catch(err => console.log(err));
//initializing express
const app = express();
//create GraphiQl application
app.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql'}))
//connect schemas with GraphQl
app.use('/graphql',bodyParser.json(), graphqlExpress({
Schema,
context:{
Story,
User
}
}))
const PORT = process.env.PORT || 3000;
app.listen(PORT, ()=> {
console.log(`Server Running on PORT ${PORT}`);
})
我的架构.js
exports.typeDefs = `
type Story {
name: String!
category: String!
description: String!
instructions: String!
createDate: String
likes: Int
username: String
}
type User {
username: String! @unique
password: String!
email: String!
joinDate: String
favorites: [Story]
}
type Query {
getAllStories: [Story]
}
`;
我的 Resolvers.js
exports.resolvers= {
Query:{
getAllStories: ()=> {}
}
};
我的故事.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const StorySchema = 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('Story', StorySchema );
我的用户.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username:{
type:String,
required:true,
unique:true
},
password:{
type:String,
required:true
},
email:{
type:String,
required:true
},
joinDate:{
type:Date,
default:Date.now
},
favorites:{
type:[Schema.Types.ObjectId],
refs:'Story'
}
})
module.exports = mongoose.model('User', UserSchema);
遇到了同样的问题。 (文档已过时??)
无论如何,我们现在必须写一些像
const response = await graphql({schema, source: query, rootValue});
代替
const response = await graphql(schema, query, rootValue);
换句话说, graphql
现在只接受一个参数,而不是多个位置参数。
只需跳转到GraphQLArgs
定义即可获取更多详细信息。
虽然这实际上是一项改进,但应相应地记录下来。
作为一个 30 分钟前开始使用graphql-js
并且已经不得不处理这样的文档问题的人,感觉不太好。
您没有将架构传递给/graphql
端点的配置。 属性名称在 javascript 中区分大小写。 改变这个:
app.use('/graphql',bodyParser.json(), graphqlExpress({
Schema,
context:{
Story,
User
}
}))
对此:
app.use('/graphql',bodyParser.json(), graphqlExpress({
schema: Schema,
context:{
Story,
User
}
}))
或使您的变量小写,然后执行:
app.use('/graphql',bodyParser.json(), graphqlExpress({
schema,
context:{
Story,
User
}
}))
我将graphql降级到15.x然后问题解决了:
npm install graphql@15.8.0
如果您不介意特定版本:
npm install graphql@15
如果您使用“纱线” :
yarn add graphql@15.8.0
如果您不介意特定版本:
yarn add graphql@15
我遇到了最新版本的 graphql 和 @nestjs/graphql:"9.1.2" 版本。
将版本降级到 15.8.0 并开始工作。
npm 我 graphql@15.8.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.