为什么本地主机不响应渲染?

问题描述

我正在使用Knex JS进行用户身份验证,以便从用户那里获取电子邮件和密码,并连接到Postgresql进行身份验证。

router.post('/login',async (req,res) => {
  knex.select('email','password').from('users')
    .where('email','=',req.body.email)
    .then((data) => {
      const isValid = bcrypt.compareSync(req.body.password,data[0].password);
      if (isValid === true) {
        res.render('index-v1');
      }
    });
});

但是render函数没有渲染ejs索引文件,但是localhost没有响应。 预先感谢您的帮助。

解决方法

因此,正如评论所建议的那样,您的路由没有覆盖两条可能的路径,这显然导致服务器缺乏响应。请记住,如果您不告诉它以res.render或类似的方式进行响应,它将不会响应,从而使您的客户端处于挂起状态。

router.post('/login',async (req,res) => {
  try {
    const data = await knex.select('email','password')
      .from('users')
      .where('email','=',req.body.email)
    const isValid = bcrypt.compareSync(req.body.password,data[0].password);
    if (isValid) {
      res.render('index-v1');
      return
    }

    res.render('error-page');
  } catch (e) {
    res.render('error-page');
  }
});

换句话说:如果密码不正确,我们仍然需要响应客户端。如果存在某种数据库错误(或者说用户不存在),我们仍然需要响应客户端。确切的响应方式当然取决于您,但这就是您需要考虑的结构。