JavaScript - Error relacionando modelos con Mongoose

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 110 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Error relacionando modelos con Mongoose

Publicado por liantony (1 intervención) el 03/04/2019 04:09:32
Estoy intentando hacer una base de datos noSQL de una tienda de libros. Cuando estoy definiendo el esquema de libros, intento relacionar ese modelo con otro modelo ya creado y obtengo un error en consola.

Lo que trato de hacer es salvar la información proveniente del frontend del libro pero la información del autor, y genero guardarla con un id diferente pero que estén relacionados con el modelo de libro.

cuando intento mandar los datos al servidor obtengo este error como si no pudiera relacionar los datos
Error:

1
2
3
{
error: "Books validation failed: author: Cast to ObjectID failed for value "Dan Brown" at path "author", genre: Cast to ObjectID failed for value "Techno-thriller" at path "genre""
}


modelos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const mongoose = require('mongoose');
 
const bookSchema = new mongoose.Schema({
  name: {
    type: String,
    required: 'Name is required',
  },
  author: {
    type: mongoose.Schema.ObjectId,
    ref: 'Author',
    //required: 'Author is required',
  },
  numberInStock: {
    type: Number,
    default: 0,
  },
  image: {
    type: String,
    default: '/path/to/default/image.png',
  },
  genre: {
    type: mongoose.Schema.ObjectId,
    ref: 'Genre',
    //required: 'Genre is required',
  },
});
 
module.exports = mongoose.model('Books', bookSchema);


1
2
3
4
5
6
7
8
9
10
11
12
const mongoose = require('mongoose');
 
 
const authorSchema = new mongoose.Schema({
  name: {
    type: String,
    //  trim: true,
    required: 'Please enter a Author name',
  },
});
 
module.exports = mongoose.model('Author', authorSchema);

1
2
3
4
5
6
7
8
9
10
11
12
const mongoose = require('mongoose');
 
 
const genreSchema = new mongoose.Schema({
  name: {
    type: String,
    //  trim: true,
    required: 'Please enter a Genre name',
  },
});
 
module.exports = mongoose.model('Genre', genreSchema);

controlador

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const express = require('express');
const Books = require('../models/books');
 
 
const create = (req, res, next) => {
  if (!req.body) {
    return res.status(400).json({
      error: 'No data received',
    });
  }
  const book = new Books(req.body); // <= supongo que los campos en el body del request corresponden con los campos del modelo
  book.save((err, result) => {
    if (err) {
      return res.status(400).json({
        error: err.message,
      });
    }
    return res.status(201).json({
      message: 'Book created succesfully',
      result,
 
    });
  });
};
 
module.exports = { create };
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder