电影不是一个构造函数 – mongoose

我正在使用MEAN堆栈,并尝试使用Mongoose将数据保存到MongoDB数据库。 但是,我不断收到错误“电影不是构造函数”为我的模型。 但是,这是mongoose文件显示它,所以我不知道我在做什么错了..

请帮忙!

Movie.js

let mongoose = require('mongoose'); let MovieSchema = new mongoose.Schema({ title: String, genre: String }); export let Movie = mongoose.model("Movie", MovieSchema); 

route.js

 import express = require('express'); import mongoose = require('mongoose'); let Movie = require('../models/Movie'); let router = express.Router(); router.post('/movies', function(req, res, next) { let new_movie = new Movie(req.body); new_movie.save(function(err, movie) { if(err) return next(err); res.send(movie); }); }); 

用MoviereplaceMovie.js文件中的最后一行

 let Movie = mongoose.model("Movie", MovieSchema); module.exports=Movie; 

可能您的问题已经解决,但共享信息总是好的。

也许这会帮助别人:)

您可以使用以下方式创build您的模式:

 const userSchema = new Schema({ userName: String, points: Number, userImage: String }); 

那么你需要使用mongoose.model

 const user = mongoose.model('User', userSchema); 

第一个参数是你的模型的集合单数名称 。 mongoose自动寻找您的模型名称的复数版本。 因此,对于上面的示例, 模型User是针对数据库中的Users集合的

.model()函数生成模式的副本。

确保在调用.model()之前添加了要构造的所有模式

欲了解更多信息,你可以检查: mongooseSchematypes , mongoose模型

希望能帮助到你 … :)

当您忘记从模型文件中导出模型或以错误的方式导出时,会发生此问题。 你的模型应该像这样输出:

 let Movie = mongoose.model("Movie", MovieSchema); module.exports=Movie; 

或者简写一下,你可以简单地写:

 module.exports=mongoose.model('Movie',MovieSchema); 

你正在调用构造函数Movie.js两次,一次在Movie.js

let Movie = new mongoose.Schema({...})

第二个是route.js

let new_movie = new Movie(req.body);

Movie.js之前删除Movie.js中的new关键字

也许可以在Movie.js最后一行改为:

let Movie = module.exports = mongoose.model('Movie', MovieSchema);

在requirepath中使用整个文件名。 所以Movie.js而不是Movie。 因为你指向一个文件,而不是一个node_module。

 let Movie = require('../models/Movie.js')