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

使用POST请求存储Login模型到MongoDB时遇TypeError构造函数错误

解决TypeError: login is not a constructor的问题

我之前也碰到过一模一样的错误,大概率是模型的导出/导入环节出了问题,结合你给出的环境和代码片段,咱们一步步来排查解决:

第一步:检查并修正login.model.js的导出逻辑

从你贴的代码来看,模型文件写到const login = modu...就断了,应该是没完成模型的创建和导出步骤。mongoose创建模型后必须正确导出,才能在控制器里作为构造函数使用。

把你的login.model.js补全成这样:

var mongoose = require('mongoose');
var loginSchema = new mongoose.Schema( {
  loginid: String,
  name: { type: String, required: true },
});

// 1. 创建Login模型(首字母大写是JS构造函数的惯例,方便区分)
const Login = mongoose.model('Login', loginSchema);
// 2. 导出模型,让控制器能导入使用
module.exports = Login;

这里要注意:如果你的模型名称是小写的login也可以,但一定要保证后面导入和实例化时的变量名和导出一致。

第二步:修正login.controller.js的导入与使用

在控制器里,必须正确导入模型,并且用导出的构造函数来创建实例:

// 注意:这里的路径要根据你的文件结构调整,比如控制器在controllers文件夹,模型在models文件夹,就用../models/login.model
const Login = require('./path/to/login.model');

// 处理POST请求的示例代码
exports.saveLogin = function(req, res) {
  try {
    // 用构造函数创建新实例
    const newLogin = new Login({
      loginid: req.body.loginid,
      name: req.body.name
    });

    // 保存到MongoDB
    newLogin.save((err, savedLogin) => {
      if (err) {
        return res.status(500).json({ error: err.message });
      }
      res.status(200).json(savedLogin);
    });
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
};

其他可能的排查点

  • 路径错误:如果导入模型时路径写错了,会导致导入的是undefined,自然无法作为构造函数使用。可以在控制器里打印console.log(Login)看看是不是undefined,如果是,赶紧修正路径。
  • 语法错误:检查login.model.js里的Schema定义有没有漏写括号、逗号,比如你给的代码里name属性的大括号有没有闭合?语法错误会导致模型创建失败,导出的内容不符合预期。
  • 变量名大小写:JS是大小写敏感的,如果模型导出的是Login,控制器里却用new login()(小写),也会触发这个错误,一定要保持变量名一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:39:05