变异时如何修复“猫鼬模型的名称”不是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中的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL:如何重用相同的类型进行查询和变异?

如何在 GraphQL 中使用变异方法在模型中创建关系?

GraphQL 查询分析是不是仅指查询?

Github Automerge 失败通知(API v4 GraphQL 变异 enablePullRequestAutoMerge)

graphql变异中无法识别的参数

使用相对路径而不是 API 服务器中继变异