2016-08-06 2 views
2

Я использую стек MEAN и пытаюсь сохранить данные в моей базе данных MongoDB с помощью Mongoose. Тем не менее, я продолжаю получать ошибку «Фильм не является конструктором» для моей модели. Но так показывают документы Mongoose, поэтому я не уверен, что я делаю неправильно.Фильм не является конструктором - 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); 
    }); 
}); 
+1

Вы используете машинописный или какой-либо другой transpiler? node.js по-прежнему не поддерживает 'import' AFAIK. – JohnnyHK

+0

Вы когда-нибудь разрешали это? Я сталкиваюсь с той же проблемой. @JohnnyHK, мой babel transpiler работает :) Любые мысли? – Kwhitejr

ответ

-2

В пути требуется использовать полное имя файла. Так Movie.js вместо фильма. Потому что вы указываете на файл, а не на узел_модуль.

let Movie = require('../models/Movie.js') 
-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);

0

Заменить последнюю строку в Movie.js файл с

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

Вероятно ваша проблема была решена, но обмен информацией всегда хорошо.

Может быть, это поможет другим :)

Вы можете создать свои схемы с помощью:

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

, то вам нужно использовать mongoose.model

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

Первый аргументом является сингулярным именем из коллекции ваша модель для. Mongoose автоматически ищет множественную версию вашего имени модели. Таким образом, для приведенного выше примера модель Пользователь предназначен для коллекции Пользователи в базе данных.

Функция .model() делает копию схемы.

Перед тем, как позвонить, убедитесь, что вы добавили все, что хотите.модель()

Для получения дополнительной информации вы можете проверить: mongooseSchematypes, mongooseModels

Надеется, что это помогает ... :)

0

Этой проблема возникает, когда вы забыли экспортировать модель из файла модели или экспорта в неправильном порядке. Ваша модель должна экспортировать так:

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

Или в сокращенном вы можете просто написать:

module.exports=mongoose.model('Movie',MovieSchema); 
Смежные вопросы