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

使用Mongoose Schema时出现“User is not a constructor”错误求助

解决Mongoose "User is not a constructor" 错误

我来帮你排查这个问题,你遇到的这个错误主要是两处写法失误导致的,下面一步步给你拆解清楚:

错误1:模型导入方式错误

在你的api.js里,导入User模型时直接赋值了文件路径字符串,没有用require方法加载模块,这会导致User只是一个普通字符串,而非Mongoose提供的模型构造函数。

修正前的api.js代码片段:

var User = '../models/userschema';

修正后:

var User = require('../models/userschema');

错误2:模型导出语法错误

在userschema.js里,导出模型时第一个参数应该是字符串类型的模型名称(对应MongoDB中的集合名,Mongoose会自动转为复数形式),但你写的User是未定义的变量,语法完全错误。

修正前的userschema.js代码片段:

module.exports = mongoose.model(User,UserSchema)

修正后:

module.exports = mongoose.model('User', UserSchema);

完整修正后的代码

api.js

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
const Schema = mongoose.Schema;
const db = 'mongodb://localhost:27017/stfe';

mongoose.connect(db,(err) => {
  if(err) {
    console.log("error");
  } else {
    console.log("DB connected at port 27017");
  }
});

// 修正:使用require正确导入模型
var User = require('../models/userschema');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.send("hello from the backend");
});

const newUser = {
  firstname:"Asim",
  lastname:"Dahal",
  email:"arsenalsim@gmail.com",
  password:12321,
  cell_number:222,
  alternate_number:111
};

router.get('/insertuser', function(req, res, next) {
  var user = new User({
    firstname:"asim",
    lastname:"dahal",
    email:"arsenalasim@gmail.com",
    password:"12321",
    cell_number:12321,
    alternate_number:12321
  });
  user.save((err) => {
    if(err) {
      console.log(err);
      res.send('Failed to save user');
    } else {
      console.log('saved');
      // 补充:给前端返回响应,避免请求挂起
      res.send('User saved successfully');
    }
  });
});

module.exports = router;

userschema.js

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

var UserSchema = new Schema({
  firstname: { type: String, required: true },
  lastname: { type: String, required: true },
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
  cell_number: { type: Number, required: true },
  alternate_number: { type: Number, required: true }
});

// 修正:正确导出Mongoose模型
module.exports = mongoose.model('User', UserSchema);

额外提个小建议:在/insertuser接口里,无论保存成功还是失败,都记得给前端返回响应(比如上面代码里加的res.send),不然前端请求会一直处于挂起状态,直到超时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:22:20