Node.js用Postman发POST请求报TypeError: Item is not a constructor如何解决
错误产生原因
- 模型文件
item.js采用命名导出的方式暴露Mongoose实例,未设置默认导出:你将模型构造函数挂载在了导出对象的itemData属性上,业务代码直接通过const Item = require('../model/item.js')引入时,拿到的是包含itemData、itemSchema两个属性的对象,并非模型构造函数本身,调用new Item()时自然会触发「不是构造函数」的类型错误。
解决方法
两种方案二选一即可:
方案1:修改业务代码引入逻辑
调整引入语句,直接取导出对象中的itemData作为构造函数:
// 替换原有引入语句 const { itemData: Item } = require('../model/item.js');
方案2:修改模型文件导出逻辑
给模型文件添加默认导出,适配现有业务代码的引入写法:
// item.js中替换原有导出代码 var itemData = mongoose.model("itemData", itemSchema); // 默认导出模型构造函数 module.exports = itemData; // 仍可保留schema的命名导出供其他文件使用 module.exports.itemSchema = itemSchema;
额外提示:当前模型中
created字段设置了unique: true属性,若业务场景存在短时间内批量创建数据的需求,可能会出现唯一索引冲突报错,不需要唯一限制可以删除该配置。
内容的提问来源于stack exchange,提问作者Miloš Milutinov
相关产品推荐
相关产品推荐

