变异时如何修复“猫鼬模型的名称”不是graphql中的构造函数
Posted
技术标签:
【中文标题】变异时如何修复“猫鼬模型的名称”不是graphql中的构造函数【英文标题】:How to fix the "Name of the mongoose Model" is not a constructor in graphql when mutating 【发布时间】:2019-08-23 17:47:51 【问题描述】:graphql 游乐场中的变异数据说明了以下信息 消息:学生不是构造函数 错误:“TypeError:学生不是构造函数” 学生是我的猫鼬模型。
我已经尝试重新安装我的 node_modules,在 github 上搜索了一些修复。
这是我的变异函数
addStudent: async (
root,
studentId, firstName, lastName, email, password ,
Student
) =>
const newStudent = await new Student(
studentId,
firstName,
lastName,
email,
password
).save();
return newStudent;
这是我的猫鼬模型
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const StudentSchema = new Schema(
studentId:
type: String,
required: true
,
firstName:
type: String,
required: true
,
lastName:
type: String,
required: true
,
// sectionId:
// type: [Schema.Types.ObjectId],
// ref: "Section",
// nullable: true
// ,
email:
type: String,
required: true
,
password:
type: String,
required: true
,
createdDate:
type: Date,
default: Date.now
);
module.exports = mongoose.model("Student", StudentSchema);
应该创建学生,但该错误会随着该消息弹出。
【问题讨论】:
【参考方案1】:已修复!我应该提供查询变量而不是在 graphql 突变上手动输入
【讨论】:
我没看清楚你能不能给我一个例子或确切的回答你改变了什么【参考方案2】:等待承诺,但在这里你正在传递学生对象 所以它返回 Student 不是构造函数
const newStudent = await new Student(
studentId,
....
).save();
相反,您可以这样做
1) 使用追加创建学生对象
const newStudent = new Student()
newStudent.studentId = studentId
newStudent.firstName = firstName
newStudent.lastName = lastName
newStudent.email = email
newStudent.password = password
2) 使用构造函数创建学生对象
const newStudent = new Student(
studentId,
firstName,
lastName,
email,
password
)
并使用 promise async 和 await 保存
await newStudent.save()
或
const newStudent = await Student.create(
studentId,
firstName,
lastName,
email,
password
)
【讨论】:
很遗憾地告诉你,这些解决方案不起作用,出现了同样的错误。 您应该使用动态变量而不是手动输入 graphql 突变。因为你在 Mutation 中传递了 Student 模型。以上是关于变异时如何修复“猫鼬模型的名称”不是graphql中的构造函数的主要内容,如果未能解决你的问题,请参考以下文章
Github Automerge 失败通知(API v4 GraphQL 变异 enablePullRequestAutoMerge)