我正在使用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);
});
});
答案 0 :(得分:1)
可能您的问题已经解决,但共享信息总是很好。
也许这会帮助别人:)
您可以使用以下方式创建架构:
const userSchema = new Schema({
userName: String,
points: Number,
userImage: String
});
然后你需要使用mongoose.model
const user = mongoose.model('User', userSchema);
第一个参数是您的模型适用于单数名称。 Mongoose会自动查找模型名称的复数版本。因此,对于上面的示例,模型User用于数据库中的Users集合。
.model()函数生成模式的副本。
确保在调用.model()
之前添加了您想要架构的所有内容有关详情,请查看:mongooseSchematypes,mongooseModels
希望它有帮助...:)
答案 1 :(得分:0)
用
替换Movie.js文件中的最后一行let Movie = mongoose.model("Movie", MovieSchema);
module.exports=Movie;
答案 2 :(得分:0)
当您忘记从模型文件导出模型或以错误的方式导出时,会发生此问题。你的模型应该像这样导出:
let Movie = mongoose.model("Movie", MovieSchema);
module.exports=Movie;
或者简单地写一下:
module.exports=mongoose.model('Movie',MovieSchema);
答案 3 :(得分:0)
由于您是通过这种方式导入模型的,所以:
let Movie = require('../models/Movie');
您的导出方法应如下:
module.exports=Movie
此方法称为默认导出。
另一种方法是命名出口,应按以下方式实现:
module.exports.Movie=Movie
然后将其导入;
let {Movie}=require('../models/Movie');
答案 4 :(得分:-1)
您在mongoose.Schema
中一次调用构造函数Movie.js
:
let Movie = new mongoose.Schema({...})
和route.js
中的第二个:
let new_movie = new Movie(req.body);
在new
Movie.js
中的mongoose.Schema
个关键字
也许可以将Movie.js
中的最后一行更改为:
let Movie = module.exports = mongoose.model('Movie', MovieSchema);
答案 5 :(得分:-2)
在require路径中使用整个文件名。所以Movie.js而不是电影。因为您指向的是文件,而不是node_module。
let Movie = require('../models/Movie.js')