每当我想使用Postman发出POST请求时,我都会得到这个错误:TypeError: Item不是构造函数。知道为什么吗?我的代码在这里:
const Item = require('../model/item.js');
const createItem = async(req,res) => {
const category = await categoryService.findCategoryByName(req.body.category);
const newItem = new Item({
name: req.body.name,
created: new Date(),
category: [category],
quantity: req.body.quantity,
});
try{
await newItem.save();
res.status(201).json(newItem);
}catch(error){
res.status(404).json({message: error.message});
}
};
和item.js:
const mongoose = require('mongoose');
const categSchema = require("./category.js")
const itemSchema = mongoose.Schema({
name: {type: String, required: true},
created: {type: Date, required: true, unique: true},
category: [categSchema.categorySchema],
quantity: {type: Number, required: true}
});
var itemData = mongoose.model("itemData", itemSchema);
module.exports.itemData = itemData;
module.exports.itemSchema = itemSchema;
您正在导入整个exports
对象,而不仅仅是它的一部分。该对象不是构造函数(它根本就不是函数)。
查看您的导出:根据文档(我不使用Mongoose),mongoose.model
返回构造函数。所以:
-
使用构造函数的标准命名(
ItemData
,而不是itemData
)导出,和 -
导入它而不是整个exports对象
例如:
module.exports.ItemData = mongoose.model("itemData", itemSchema);
module.exports.itemSchema = itemSchema;
并导入它(通过从exports对象解构它):
const { ItemData } = require("../model/item.js");
// ^−−−−−−−−−−^−−−−−−−−− destructuring
那么,new ItemData
应该可以工作。
或者,导入整个内容(const item = require(/*...*/);
),然后使用new item.ItemData
。