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');是否存在问题。
错误原因及解决方法
- 核心错误:模型导出语法错误
在owoc.js中,你错误使用了mongoose.exports来导出模型,正确的Node.js模块导出语法是module.exports。mongoose没有exports属性,导致路由文件中require进来的Post为undefined,无法作为构造函数使用。
修改owoc.js的最后一行:
module.exports = mongoose.model('Owoc', OwocSchema)
- 可选优化:代码语义一致性
为避免变量名混淆,可将路由文件中的变量名与模型名统一:
// 路由文件中修改导入语句 const Owoc = require('../models/owoc'); // 创建实例时同步修改 const owoc = new Owoc({ rodzaj: req.body.rodzaj, kolor: req.body.kolor })
- 额外检查项
- 确认
../models/owoc的文件路径正确,文件确实存在于对应位置 - 在Linux/macOS环境下,注意文件名大小写是否匹配(Node.js区分大小写)
内容的提问来源于stack exchange,提问作者Freazy x
相关产品推荐
相关产品推荐

