gpt4 book ai didi

node.js - 如何使用异步 readFile 调用解析为 if 条件中的值 (Express)

转载 作者:太空宇宙 更新时间:2023-11-03 23:16:12 25 4
gpt4 key购买 nike

我正在创建一个 Express 端点,在其中验证用户名/密码是否在我的数据库(json 文件)中

router.post('/login', (req, res) => {
let userData = req.body;
if (validateEmailAndPassword(userData.username, userData.password) {
res.send(userData);
} else {
res.status(401).send({ error: "Username/Password combination is incorrect." });
}
})

const validateEmailAndPassword = (username, password) => {
let validCreds = false;
fs.readFile('db/users.json', 'utf8', (err, data) => {
if (data) {
const stream = JSON.parse(data);
const usersFound = stream.filter(info => {
if (info.username === username && info.password ===password) { return true; }
})
if (usersFound.length >= 1) { validCreds = true; }
return validCreds;

} else {
throw Error(err);
}
})
}

第一个代码块第 3 行中的“validateEmailAndPassword(userData.username, userData.password)”在 if 条件中返回“未定义”,因为它是异步的。

同步解析“validateEmailAndPassword(userData.username, userData.password)”以便我在不使用 readFileSync 的情况下获得 true/false 值的最佳方法是什么?

提前致谢!

最佳答案

使用async awaitpromises

router.post('/login', async(req, res) => {
let userData = req.body;
if (await validateEmailAndPassword(userData.username, userData.password)) {
res.send(userData);
} else {
res.status(401).send({ error: "Username/Password combination is incorrect." });
}
})

const validateEmailAndPassword = (username, password) => {
let validCreds = false;
return new Promise(resolve => {
fs.readFile('db/users.json', 'utf8', (err, data) => {
if (data) {
const stream = JSON.parse(data);
const usersFound = stream.filter(info => {
if (info.username === username && info.password ===password) { return true; }
})
if (usersFound.length >= 1) { validCreds = true; }
resolve(validCreds);
return validCreds;

} else {
throw Error(err);

}
})
})
}

多田

关于node.js - 如何使用异步 readFile 调用解析为 if 条件中的值 (Express),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55189722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com