'UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): AssertionError [ERR_ASSERTION]
I have the following setup in Visual Studio Code for nodejs project:
Model: genre.js
const Joi = require('joi');
const mongoose = require('mongoose');
const genreSchema = new mongoose.Schema({
name:{
type:String,
required:true,
minlength:5,
maxlength:50
}
});
const Genre = mongoose.model('Genre',genreSchema);
function validateGenre(genre) {
const schema = {
name: Joi.string().min(3).required()
};
return Joi.validate(genre, schema);
}
exports.genreSchema = genreSchema;
exports.Genre = Genre;
exports.validate = validateGenre;
movie.js:
const Joi = require('joi');
const mongoose = require('mongoose');
const { genreSchema } = require('./genre');
const Movie = mongoose.model('Movie', new mongoose.Schema({
title: {
type: String,
required: true,
trim: true,
minlength: 5,
maxlength: 255
},
genre: {
type: genreSchema,
required: true
},
numberInStock: {
type: Number,
required: true,
min: 0,
max: 255
},
dailyRentalRate: {
type: Number,
required: true,
min: 0,
max: 255
}
}));
function validateMovie(movie) {
const schema = {
title: Joi.string().min(5).max(50).required,
genreId: Joi.string().required,
numberInStock: Joi.number().min(0).required,
dailyRentalRate: Joi.number().min(0).required
};
return Joi.validate(movie,schema);
}
exports.Movie = Movie;
exports.validate = validateMovie;
routes: movies.js
const { Movie, validate } = require('../models/movie');
const { Genre } = require('../models/genre');
const mongoose = require('mongoose');
const express = require('express');
const router = express.Router();
router.get('/', async (req, res) => {
const movies = await Movie.find().sort('name');
res.send(movies);
});
router.get('/:id', async (req, res) => {
const movie = await Movie.findById(req.params.id);
if (!movie) return res.status(404).send('The movie with the given Id was not found');
res.send(movie);
});
router.post('/', async (req, res) => {
const { error } = validate(req.body);
if (error) return res.status(400).send(error.details[0].message);
const genre = await Genre.findById(req.body.genreId);
if (!genre) return res.status(404).send('Invalid genre.');
let movie = new Movie({
title: req.body.title,
genre: {
_id: genre._id,
name: genre.name
},
numberInStock: req.body.numberInStock,
dailyRentalRate: req.body.dailyRentalRate
});
movie = await movie.save();
res.send(movie);
});
router.put('/:id', async (req, res) => {
const { error } = validate(req.body);
if (error) return res.status(400).send(error.details[0].message);
const genre = await Genre.findById(req.body.genreId);
if (!genre) return res.status(404).send('Invalid genre.');
const movie = await Movie.findByIdAndUpdate(req.params.id, {
title: req.body.title,
genre: {
_id: genre._id,
name: genre.name
},
numberInStock: req.body.numberInStock,
dailyRentalRate: req.body.dailyRentalRate
}, { new: true });
if (!movie) return res.status(404).send('The movie with the given ID was not found.');
res.send(movie);
});
router.delete('/:id', async (req, res) => {
const movie = await Movie.findByIdAndRemove(req.params.id);
if (!movie) return res.status(404).send('The movie with the given ID was not found.');
res.send(movie);
});
module.exports = router;
On trying to create a movie with the following setup :
I am getting an error:
UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): AssertionError [ERR_ASSERTION]
Can anyone help me to fix this issue
Solution 1:[1]
first, the Joi.validate(genre, schema) is an outdated built-in function try doing something like this:
function validateGenre(genre) {
const schema = joi.object({
name: Joi.string().min(3).required()
});
return schema.validate(genre);
}
And also in your validateMovie function, you need to add () next to the required e.g
function validateMovie(movie){
const shema = joi.object({
name: joi.string().max(10).min(5).required();
});
return shema.validate(movie);
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |