首页 > 解决方案 > 尝试使用express和redis制作登录网页

问题描述

我正在尝试制作一个简单的登录页面。我必须为大学项目做。问题很简单,我正在尝试使用 redis 作为用户和密码的数据库。问题是我无法从从 redis 获得的响应中提取值。我有一个 docker 运行 redis 映像并且所有东西都连接。在下面的示例中,我试图将简单的布尔值从 true 更改为 false根据键内的数据(我使用“a”作为键),但无论我做什么,值似乎都没有改变,值得注意的是我对此非常陌生,特别是对 js,我读了在所有功能都是异步的redis api中,我尝试更改代码,但没有帮助。

 app.get('/enter', (req, res) => {
  var username =req.query.user;
  var password = req.query.pass;
  ans = false
  redis.get(username,function(err, reply) {
    if(reply != null ) ans = true;
  })
  console.log(ans);
})

我只是想验证密钥是否有值,我试图在请求之前和之后创建一个变量,但它没有调整感谢您的时间

标签: javascriptexpressredis

解决方案


我看到您不了解 javascript 的回调和异步行为的非常基础的知识。

那么你可以这样编码:

app.get('/enter', async (req, res) => {
  var username =req.query.user;
  var password = req.query.pass;
  ans = false
  let reply = await getUsername(username)
  console.log(reply)
  console.log(ans);
})

function getUsername(username) {
   return new Promise((res, rej) => {
      redis.get(username, function(err, reply) {
         if(err) rej(err)
         res(reply)
      })
   })
}

您可以只承诺您的 redis 代码,new Promise然后您可以async / await在其上使用样式

否则,如果您有更多代码,您需要在回调中编写代码,这会导致回调地狱


推荐阅读