NodeJS 错误:未定义应为GraphQL架构

wpcxdonn  于 2023-02-12  发布在  Node.js
关注(0)|答案(4)|浏览(137)

我收到一条错误消息,显示“错误:预期未定义的是一个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]
}

`;

我的解决方案. js

exports.resolvers= {

    Query:{
        getAllStories: ()=> {}
    }

};

我的故事

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);
nmpmafwu

nmpmafwu1#

2022年2月更新:

我将graphql降级为15.x,然后问题就解决了:

npm install graphql@15.8.0

如果您不介意特定版本

npm install graphql@15

如果使用**"Yarn"**:

yarn add graphql@15.8.0

如果您不介意特定版本

yarn add graphql@15
brtdzjyr

brtdzjyr2#

遇到了同样的问题。(文档过时了??)
不管怎样,我们现在要写这样的东西

const response = await graphql({schema, source: query, rootValue});

代替

const response = await graphql(schema, query, rootValue);

换句话说,graphql现在只接受一个参数,而不是多个位置参数。
只需跳转到GraphQLArgs定义即可获得更多详细信息。
虽然这实际上是一种改进,但应相应记录。
作为一个30分钟前开始使用graphql-js的人,已经不得不处理这样的文档问题,感觉不太好。

cx6n0qe3

cx6n0qe33#

您没有将架构传递到/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
  }
}))
brtdzjyr

brtdzjyr4#

我在使用最新版本的graphql和@nestjs/graphql时遇到了这个问题:“9.1.2”版本。
已将版本降级为15.8.0,并已开始工作。
15.8.0时的NPM i图形

相关问题