微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Express/MongoDB - 向数据库发送请求时如何在 try/catch 块内使用 res.render

如何解决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 举报,一经查实,本站将立刻删除。