Estoy tratando de usar la validación del modelo Sequelize para validar un campo de formulario. Si los campos del libro o del autor están vacíos, debería aparecer este mensaje:
¡Oops! Ha ocurrido un error! Se requiere "Título". Se requiere "Autor".
El problema que tengo con mi código es que el mensaje actualmente dice:
¡Oops! Ha ocurrido un error! Book.title no puede ser nulo. Libro.autor no puede ser nulo
Agradecería alguna ayuda. Aquí está mi código de modelo de libro:
'use strict'; const { Model } = require('sequelize'); module.exports = (sequelize, DataTypes) => { class Book extends Model { /** * Helper method for defining associations. * This method is not a part of Sequelize lifecycle. * The `models/index` file will call this method automatically. */ static associate(models) { // define association here } }; Book.init({ title: { type: DataTypes.STRING, allowNull: false, validate: { notEmpty: { msg: '"Title" is required' } } }, author: { type: DataTypes.STRING, allowNull: false, validate: { notEmpty: { msg: '"Author" is required' } } }, genre: DataTypes.STRING, year: DataTypes.INTEGER }, { sequelize, modelName: 'Book', }); return Book; };Aquí está el código específico en mi archivo de rutas:
/* Post new book to database */ router.post('/', asyncHandler(async (req,res) => { let book; try { book = await Book.create(req.body); res.redirect('/books'); } catch (error) { if (error.name === "SequelizeValidationError") { book = await Book.build(req.body); res.render('books/new_book', { book, errors: error.errors, title: "New Book" }); } else { throw error; } } })); /* Update book info in database */ router.post('/:id', asyncHandler(async (req,res) => { let book; try { book = await Book.findByPk(req.params.id); if (book) { await book.update(req.body); res.redirect("/books"); } else { res.sendStatus(404); } } catch (error) { if(error.name === "SequelizeValidationError") { book = await Book.build(req.body); book.id = req.params.id; res.render("books/update_book", { book, errors: error.errors, title: "Update Book" }) } else { throw error; } } }));Aquí está mi código pug para mostrar los errores:
if(errors) h2.error Oops an error occurred! ul.error each error in errors li #{error.message}Lo descubrí, necesitaba agregar un mensaje notNull en el objeto de validate en el modelo del Libro
Book.init({ title: { type: DataTypes.STRING, allowNull: false, validate: { notNull: { msg: '"Title" is required' }, notEmpty: { msg: '"Title" is required' } } }, author: { type: DataTypes.STRING, allowNull: false, validate: { notNull: { msg: '"Author" is required' }, notEmpty: { msg: '"Author" is required' } } }, genre: DataTypes.STRING, year: DataTypes.INTEGER }, { sequelize, modelName: 'Book', });