提问人:Mewshinyex 提问时间:7/2/2022 更新时间:7/9/2022 访问量:218
如何在Node.js中对MySQL查询进行while循环?
How to do a while loop for a MySQL query in Node.js?
问:
我目前正在尝试使用Typescript和Express将php代码转换为Node.js。
在脚本中,我在查询数据库之前生成一个随机的 6 位代码以验证该代码不存在,否则我会生成一个新代码。
这是原始的PHP代码:
$code = generate_random_int(); // Generate a random code
$existing_codes = exec_sql($db,"SELECT code FROM codes WHERE code = $code;"); // Check if the generated code already exists in the database
while(!empty($existing_codes)){ // While there is (at least) 1 occurence in the DB for the generated code
$code = generate_random_int(); // Generate a new random code
$existing_codes = exec_sql($db,"SELECT code FROM codes WHERE code = $code;"); // Update the check for the newly generated code.
// If an occurence is found, the while loop will be reiterated. Otherwise, the while loop will end with the last generated code.
}
但是,Node.js MySQL 库只允许回调,因为该函数是异步的,这阻止了我上面说明的行为。
我在互联网上到处看,还没有找到任何在 Node.js 中重现这种行为的方法,所以这就是我在这里写这篇文章的原因:)
我考虑过在其中使用 db.query 调用的 for 循环,但没有成功,与 while 语法和更新的布尔值相同。 这是我最新的(不成功的)尝试:
let code = generateRandomInt()
// query is a simplified function for db.query() from MySQL
query(`SELECT code FROM codes WHERE code = ${code};`, result => {
if (result === []) {
res.send(String(code))
return
} else {
code = generateRandomInt()
// While loop creating a new SQL statement for the new code and regenerating it until the response is []
}
})
res.send(String(code))
非常感谢您的帮助:)
PS :我是 Express 的新手,我不习惯在 StackOverflow 上发帖,所以请不要犹豫,告诉我我是否做错了什么,或者您是否需要任何补充信息
答:
0赞
Edwin Torres
7/9/2022
#1
这是另一种方法。一旦你有了一组现有的代码,就使用循环来查找一个未使用的代码:
...
const go = async () => {
const existingCodes = await getExistingCodes(); // your function that returns a list
// of existing codes; return a Promise
// find an unused code
let code = generateRandomInt();
while (existingCodes.indexOf(code) !== -1) {
code = generateRandomInt();
}
// use your new code
console.log(`new code is: ${code}`);
};
go();
下一个:从手风琴获取数据和内部数据
评论
node-mysql
await
SELECT code FROM codes where code >= ?