使用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
相关产品推荐
相关产品推荐

