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

NodeJS中Mongoose Schema报错:TypeError: Cafe不是构造函数

解决Cafe is not a constructor错误的方案

你在使用NodeJS、Express和MongoDB搭建咖啡馆网站时,尝试通过GET路由用自定义模型创建新数据,终端持续抛出UnhandledPromiseRejectionWarning: TypeError: Cafe is not a constructor错误,核心问题出在模型文件的导出语法错误。

错误原因

你的Schema定义文件(cafe.js)中,使用了错误的模块导出语法:module.export,而Node.js中正确的导出语法是module.exports(末尾多一个s)。这个拼写错误导致你在app.js中通过require("./models/cafe")引入的不是Mongoose模型构造函数,而是undefined,因此无法用new Cafe()实例化对象。

修复步骤

1. 修正模型文件的导出语句

修改cafe.js中的最后一行代码:

// 错误写法
module.export = mongoose.model('Cafe', CafeSchema);

// 正确写法
module.exports = mongoose.model('Cafe', CafeSchema);

2. (推荐)添加路由错误捕获

由于你的路由使用了async/await,未处理的Promise拒绝会触发警告,建议用try/catch块捕获错误,增强代码健壮性:

app.get('/createcafe', async(req, res) => {
  try {
    const cafe = new Cafe ({ name: 'Cueva Matera', description: "A cave like theme cafe"});
    await cafe.save();
    res.send(cafe)
  } catch (err) {
    res.status(500).send(`创建咖啡馆数据失败:${err.message}`);
    console.error(err);
  }
}) 

修正后的完整代码

cafe.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const CafeSchema = new Schema({
   name: String,
   price: String,
   description: String,
   location: String
});

module.exports = mongoose.model('Cafe', CafeSchema);

app.js(核心部分)

const path = require('path')
const mongoose = require('mongoose');
const Cafe = require("./models/cafe");

mongoose.connect('mongodb://localhost:27017/cafe-hopping', {
  useNewUrlParser: true,
  useUnifiedTopology: true
})

const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", () => {
  console.log("Database connected");
});

const app = express() 

app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'))

app.get('/createcafe', async(req, res) => {
  try {
    const cafe = new Cafe ({ name: 'Cueva Matera', description: "A cave like theme cafe"});
    await cafe.save();
    res.send(cafe)
  } catch (err) {
    res.status(500).send(`创建咖啡馆数据失败:${err.message}`);
    console.error(err);
  }
}) 

// 记得添加端口监听,比如:
// app.listen(3000, () => {
//   console.log("Server running on port 3000");
// })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:25:23