电影不是构造函数 - Mongoose

Posted

技术标签:

【中文标题】电影不是构造函数 - Mongoose【英文标题】:Movie is not a constructor - Mongoose 【发布时间】:2016-12-12 22:52:12 【问题描述】:

我正在使用 MEAN 堆栈并尝试使用 Mongoose 将数据保存到我的 MongoDB 数据库中。但是,我不断收到错误 我的模型的“电影不是构造函数”。但这就是猫鼬文档的显示方式,所以我不确定我做错了什么..

请帮忙!

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);
  );
);

【问题讨论】:

您使用的是打字稿还是其他转译器? node.js 仍然不支持importAFAIK。 你解决过这个问题吗?我遇到了同样的问题。 @JohnnyHK,我的 babel 转译器正在工作 :) 有什么想法吗? 【参考方案1】:

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

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

或者您可以简写为:

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

【讨论】:

【参考方案2】:

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

也许这会帮助其他人:)

您可以使用以下方法创建架构:

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

希望对您有所帮助... :)

【讨论】:

【参考方案3】:

将 Movie.js 文件中的最后一行替换为

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

【讨论】:

【参考方案4】:

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

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

第二个在route.js:

let new_movie = new Movie(req.body);

删除Movie.jsmongoose.Schema之前的new关键字

也许将Movie.js 中的最后一行更改为:

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

【讨论】:

【参考方案5】:

在需要路径中使用整个文件名。所以 Movie.js 而不是 Movie。因为您指向的是文件,而不是 node_module。

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

【讨论】:

以上是关于电影不是构造函数 - Mongoose的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mongoose Schema 修复 GraphQL Mutation 中的构造函数错误 [重复]

Nest.js 模型依赖注入与 Mongoose 没有构造函数

如果子类未定义构造函数,是不是会调用父构造函数?

程序使用复制构造函数而不是移动构造函数

创建重载构造函数时,是不是需要默认构造函数? [复制]

我定义了一个非拷贝构造函数;复制构造函数是不是仍会被隐式定义?