javascript - 尝试使用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);
})
我只是想验证密钥是否有值,我试图在请求之前和之后创建一个变量,但它没有调整感谢您的时间
解决方案
我看到您不了解 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
在其上使用样式
否则,如果您有更多代码,您需要在回调中编写代码,这会导致回调地狱
推荐阅读
- idris - 试图将隐式参数引入 Idris 中定义左侧的范围会导致“f 应用于太多参数”错误
- dart - Using Dart Intl how can I initialize multiple libraries?
- vba - Creating Excel VBA code for if Checkbox is Checked display "X" in Cell K21
- external - Using Identity Server 4 with OIDC External Provider is not mapping the claims
- python - Pandas function hat prints the value of a column from antoher data frame
- flutter - 带有动画提示/标签的 TextField
- webdriver-io - 如何阻止 webdriverIo 测试运行器关闭浏览器
- elasticsearch - KEY 为 Null 的 Elasticsearch 查询
- c# - C# 使用构造函数设置多维数组的值
- android - 如何从网络而不是从 http 缓存中获取数据?