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

Postman测试时出现TypeError: Product.create不是函数的问题求助

解决TypeError: Product.create/find is not a function错误

我已经完成所有连接配置,但在Postman测试接口时遇到两个错误:

  • 调用创建接口时提示 TypeError: Product.create is not a function
  • 调用getAll接口时提示 TypeError: Product.find is not a function

以下是我的代码:

模型文件(models/product.model.js)

const mongoose = require("mongoose")

const ProductSchema = new mongoose.Schema(
    {
        title: {type:String, required: [true,"{PATH} is required"] , minlength : [3, "{PATH} must be 3 or more"]},
        price: {type:Number, required: [true,"{PATH} is required"], min : [0, "{PATH} must be 3 or more"]},
        description: {type:String}
    },{timestamps:true}
)

module.exports.Product = mongoose.model("Product",ProductSchema);

控制器文件(controllers/product.controller.js)

const Product = require("../models/product.model")

module.exports = {
    getAll: (req,res) => {
        Product.find()
            .then(object=> res.json(object))
            .catch(err=> res.json(err))
    },

    getOne: (req,res) => {
        Product.findOne({_id: req.params.id})
            .then(object=> res.json(object))
            .catch(err=> res.json(err))
    },

    create: (req,res) => {
        Product.create(req.body)
            .then(object=> res.json(object))
            .catch(err=> res.status(400).json(err))
    },

    update: (req,res) => {
        Product.findByIdAndUpdate({_id: req.params.id}, req.body, {new:true, runValidators:true})
            .then(object=> res.json(object))
            .catch(err=> res.status(400).json(err))
    },

    delete: (req,res) => {
        Product.deleteOne({_id: req.params.id})
            .then(confirm=> res.json(confirm))
            .catch(err=> res.json(err))
    }
}

问题原因

问题出在模块导出与导入的不匹配:你的模型文件将mongoose模型挂载到了module.exports.Product属性上,但控制器里直接把整个导入的对象当成模型来调用方法——这个对象本身并没有find、create这些方法,真正的模型是它的Product属性。

解决方案(二选一即可)

方案1:修改控制器的导入方式

将控制器的导入语句改为解构导入,直接获取到模型:

const { Product } = require("../models/product.model")

方案2:修改模型的导出方式

如果不想改动控制器,也可以直接在模型文件里导出模型本身:

// 替换原来的module.exports.Product = ...
module.exports = mongoose.model("Product",ProductSchema);

修改完成后,控制器里的Product就指向了正确的mongoose模型,调用find、create等方法就不会再报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:20:58