ошибка мангуста при использовании push () - PullRequest
4 голосов
/ 05 января 2012
-- express_example 
|---- app.js 
|---- models 
|-------- songs.js 
|-------- albums.js 
|---- and another files of expressjs 

songs.js:

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema, 
    ObjectId = Schema.ObjectId;

var SongSchema = new Schema({
    name: {type: String, default: 'songname'},
    link: {type: String, default: './data/train.mp3'}, 
    date: {type: Date, default: Date.now()},
    position: {type: Number, default: 0},
    weekOnChart: {type: Number, default: 0},
    listend: {type: Number, default: 0}
});
module.exports = mongoose.model('Song', SongSchema);

album.js:

var mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    SongSchema = require('mongoose').model('Song'),
    ObjectId = Schema.ObjectId;

var AlbumSchema = new Schema({
    name: {type: String, default: 'songname'},
    thumbnail: {type:String, default: './images/U1.jpg'},
    date: {type: Date, default: Date.now()},
    songs: [SongSchema]
});

app.js:

require('./models/users');
require('./models/songs');
require('./models/albums');

var User = db.model('User');
var Song = db.model('Song');
var Album = db.model('Album');

var song = new Song();
song.save(function( err ){
    if(err) { throw err; }
    console.log("song saved");
});

var album = new Album();
album.songs.push(song);

album.save(function( err ){
    if(err) { throw err; }
    console.log("save album");
});

Когда я использую код album.songs.push(song);, я получаю ошибку:

Невозможно вызвать метод 'call' из undefined`.

Пожалуйста, помогите мне решить эту проблему. Если я хочу сохранить много песен в альбоме , как мне это сделать?

1 Ответ

7 голосов
/ 05 января 2012

Вы запутались между model и schema

в albums.js,

var mongoose = require('mongoose'),
Schema = mongoose.Schema, 
SongSchema = require('mongoose').model('Song'), // <<<<<<<<<< here should be a schema istead of a model
ObjectId = Schema.ObjectId;

Один из способов исправить это попытка экспортировать SongSchema в songs.js, затем потребуйте это в albums.js

в songs.js:

mongoose.model('Song', SongSchema); // This statement registers the model
module.exports = SongSchema; // export the schema instead of the model 

в albums.js

SongSchema = require('./songs');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...