如何解决Express/MongoDB - 向数据库发送请求时如何在 try/catch 块内使用 res.render
我正在制作一个投票应用程序,我的一个路由是获取所有投票的 GET 请求。
我想要做的就是将民意调查传递给我的仪表板视图,如果没有民意调查,我也想将错误传递给仪表板视图。
我认为我当前的实现是错误的,因为如果没有轮询,仪表板视图会收到一个空数组,而不是错误。
谢谢
router.get('/dashboard',isAuth,async (req,res) => {
try {
const polls = await Poll.find().populate('user',['name','id']);
res.render('dashboard',{
polls
});
} catch(err) {
res.status(400);
res.render('dashboard',{
error: 'Could not find any polls'
});
}
});
解决方法
如果 polls
为假/空,您可以抛出错误。像这样:
const getType = element => Object.prototype.toString.call(element);
// Put this function in a helper file and use it throughout the source code
const isEmpty = element => {
if (
// undefined
typeof element === 'undefined' ||
// string
(typeof element === 'string' && element.trim().length == 0) ||
// null
getType(element) === '[object Null]' ||
// object
(getType(element) === '[object Object]' && !Object.keys(element).length) ||
// array
(getType(element) === '[object Array]' && !element.length)
) {
return true;
}
return false;
}
router.get('/dashboard',isAuth,async (req,res) => {
try {
const polls = await Poll.find().populate('user',['name','id']);
if (isEmpty(polls)) {
throw new Error("Could not find any polls");
}
res.render('dashboard',{
polls
});
} catch (err) {
res.status(400);
res.render('dashboard',{
error: 'Could not find any polls'
});
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。