电影不是构造函数 - 猫鼬

时间:2016-08-06 18:38:51

标签: node.js mongodb express mongoose mongoose-schema

我正在使用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);
  });
});

6 个答案:

答案 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()

之前添加了您想要架构的所有内容

有关详情,请查看:mongooseSchematypesmongooseModels

希望它有帮助...:)

答案 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')