【问题标题】:Why isn't localhost responding to render?为什么 localhost 不响应渲染?
【发布时间】:2020-08-31 07:46:14
【问题描述】:

我正在使用 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');
      }
    });
});

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

【问题讨论】:

  • 可能你的函数抛出了一个错误。尝试在 Promise 中添加 catch 函数并记录错误。
  • 浏览器/节点控制台中的任何错误。??此外,您仅在 isValid 为真时进行渲染。 false 呢?可能是你打错了。

标签: node.js postgresql ejs knex.js


【解决方案1】:

因此,正如 cmets 所建议的,您的路线未涵盖两条可能的路径,这显然导致服务器缺乏响应。请记住,如果您不告诉它响应(使用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');
  }
});

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

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多