Tengo una ruta que es /mysafe/idofthemodel. Cuando no se encuentra el idofthemodel , arroja un error de conversión Falló la conversión Cast to ObjectId failed for value "something" (type string) at path "_id" for model "modelname". En lugar del error, me gustaría tener un error 404.
Aquí está mi ruta
app.get('/mysafe/:safeid',isLoggedIn,isAuthor, async(req,res)=> { const { safeid } = req.params; const safe=await Safe.findById(safeid).populate('author') const password = await Password.find({safe:safeid}).populate('safe') res.render('passwords/index', { password,safe }) })Esquemas:
const PasswordsSchema = new Schema({ title: String, url: String, password: String, safe: { type: Schema.Types.ObjectId, ref: "Safe" }, }) const SafeSchema = new Schema({ author: { type: Schema.Types.ObjectId, ref: "User" }, })Aquí estoy usando EJS para representar la página de error 404, y el archivo de la página se encuentra en views/errors/404.ejs
const { safeid } = req.params; try { const safe = await Safe.findOne({ _id: mongoose.Types.ObjectId(safeid) }).populate('author') if (!safe) { return res.status(404).render('errors/404.ejs') } const password = await Password.findOne({ safe: mongoose.Types.ObjectId(safeid) }).populate('safe') return res.render('passwords/index', { password, safe }) } catch (error) { return res.status(500).render('errors/500') }middleware.js
module.exports.isAuthor = (req, res, next) => { const { safeid } = req.params if (!mongoose.Types.ObjectId.isValid(safeid)) { return res.status(404).render('errors/404.ejs') } Safe.findById(safeid).then(safe => { if (!safe) { return res.status(404).render('errors/404.ejs') } if (!safe.author._id.equals(req.user._id)) { req.flash('error', 'Notfound'); return res.redirect('/'); } next(); }); }