我有一條路線,/mysafe/idofthemodel.當idofthemodel找不到它時,它會拋出一個強制轉換錯誤Cast to ObjectId failed for value "something" (type string) at path "_id" for model "modelname".而不是我想要的錯誤 404 錯誤。
這是我的路線
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 })
})
架構:
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"
},
})
uj5u.com熱心網友回復:
這里我使用EJS來渲染404錯誤頁面,頁面檔案位于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')
}
中間件.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();
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357805.html
標籤:javascript 节点.js MongoDB 表达 猫鼬
