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

Node.js电商应用存数据报错:TypeError: Post is not a constructor

排查Node.js电商应用中"TypeError: Post is not a constructor"错误

错误信息

TypeError: Post is not a constructor

相关代码文件

路由文件 owoce.js

const express = require('express');

const router = express.Router();
const Post = require('../models/owoc');

router.get('/',  (req,res) => {
    res.send('we are on owoce');
    //try {
    //    const owoce = await Owoc.find()
    //    res.json(owoce)
        
   // }catch (err){

    
       // res.status(500).json({ message: err.message })
        
   // }
        
 })

// router.get('/jablka', (req,res) => {
 //   res.send('we are on jablka');
 //});

 router.post('/', (req,res) => {
    const owoc = new Post({
        rodzaj: req.body.rodzaj,
        kolor: req.body.kolor
    })

    owoc.save()
    .then(data =>{
        res.json(data);
    })
    .catch(err => {
        res.json({message: err});
    });
 });


 module.exports = router;

模型文件 owoc.js

const mongoose = require('mongoose');

const OwocSchema = new mongoose.Schema({
    rodzaj: {
        type: String,
        required: true
    },
    kolor: {
        type: String,
        required: true 
    },
    date: {
        type: Date,
        default: Date.now
    }
});


//mongoose.Schema({
 //   username: String,
  //  password: String


//})

mongoose.exports = mongoose.model('Owoc', OwocSchema)

服务器文件 server.js

const express = require('express')
//const req = require('express/lib/request');
//const res = require('express/lib/response');
const app = express()
const mongoose = require('mongoose')
const bodyParser = require('body-parser');
require('dotenv/config');

app.use(bodyParser.json());


//const db = mongoose.connection('mongodb://localhost/sklep')
//MIDDLEWARES
app.use('/posts', ()=> {
    console.log('This is a middleware');
});

//IMPORT ROUTES
const owoceRoute = require('./routes/owoce');

app.use('/owoce', owoceRoute);


//ROUTES
app.get('/', (req,res) => {
   res.send('we are on home');
});




//connect to DB
mongoose.connect(
    process.env.DB_CONNECTION ,mongoose.set('strictQuery', true),  ()=> {
    console.log('Connected to DB!!:))');
}); //{ useNewUrlParser: true})





//how to lisen to server
///db.on('error',(error) => console.error(error))
///db.once('open',() => console.log('connected to database'))
//db.on('connected', () => console.log('Connected to database'))
app.listen(3000, () => console.log('server started'))

问题背景

开发Node.js电商应用时,提交表单尝试将数据保存到数据库时触发上述错误,已排查类似问题但未解决,不确定const Post = require('../models/owoc');是否存在问题。

错误原因及解决方法

  1. 核心错误:模型导出语法错误
    在owoc.js中,你错误使用了mongoose.exports来导出模型,正确的Node.js模块导出语法是module.exports。mongoose没有exports属性,导致路由文件中require进来的Post为undefined,无法作为构造函数使用。

修改owoc.js的最后一行:

module.exports = mongoose.model('Owoc', OwocSchema)
  1. 可选优化:代码语义一致性
    为避免变量名混淆,可将路由文件中的变量名与模型名统一:
// 路由文件中修改导入语句
const Owoc = require('../models/owoc');

// 创建实例时同步修改
const owoc = new Owoc({
    rodzaj: req.body.rodzaj,
    kolor: req.body.kolor
})
  1. 额外检查项
  • 确认../models/owoc的文件路径正确,文件确实存在于对应位置
  • 在Linux/macOS环境下,注意文件名大小写是否匹配(Node.js区分大小写)

内容的提问来源于stack exchange,提问作者Freazy x

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:20:41