问题描述
我正在制作一个投票应用程序,我的一个路由是获取所有投票的 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'
});
}
});