You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose报错TypeError: Schema is not a constructor 求助排查

这个错误的核心原因是你创建mongoose模型实例时的传参方式不对,另外我们也可以排查几个其他潜在问题:

1. 最直接的错误:模型实例化时参数格式错误

你当前创建ContactData实例的代码是:

let contact = new ContactData( name, number );

但mongoose的模型构造函数只接受一个对象参数,这个对象的键需要和你Schema里定义的字段一一对应。你传了两个独立的参数,mongoose无法正确解析,进而触发了Schema is not a constructor的错误。

修正后的代码应该是:

let contact = new ContactData({ name, number });

2. 其他需要确认的检查点

  • 确认模型导入正确:确保你在router文件里正确导入了ContactData模型,比如路径拼写正确、模型名称大小写一致(比如不要写成contactData)。
  • 确认请求体解析配置:虽然这不是直接导致当前错误的原因,但要确保你的Express服务器配置了JSON请求体解析,比如添加了:
    app.use(express.json());
    
    否则req.body会是undefined,后续保存数据也会失败。
  • mongoose版本兼容性:如果你使用的是mongoose v6+,你的Schema写法是没问题的,但可以确认下连接代码是否符合新版本要求(不过你说连接正常,这个大概率不是问题)。

修正后的完整POST请求代码

router.post("/create_contact", (req, res) => {
  const { name, number } = req.body;
  // 传入包含字段的对象
  let contact = new ContactData({ name, number });
  contact.save((error, savedContact) => {
    if (error) {
      console.error(error);
      return res.status(500).json({ error: "Failed to save contact" });
    }
    return res.json(savedContact);
  });
});

或者更推荐使用async/await的写法,代码可读性更好:

router.post("/create_contact", async (req, res) => {
  try {
    const { name, number } = req.body;
    const contact = new ContactData({ name, number });
    const savedContact = await contact.save();
    res.json(savedContact);
  } catch (error) {
    console.error(error);
    res.status(500).json({ error: "Failed to save contact" });
  }
});

内容的提问来源于stack exchange,提问作者Auclown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:06:04