【问题标题】:router.get function in node.js doesn't await funcition [duplicate]node.js 中的 router.get 函数不等待函数 [重复]
【发布时间】:2023-01-26 19:03:09
【问题描述】:

我在 node.js 中为我的网站构建一个电子邮件验证,为了让它工作,它改变了 mysql 数据库中的一个值,如果它工作或不工作,它必须返回 1 或 0,但代码不等待即使我使用asyncawait,返回和 inmidiatly 走得更远。

这是我在 pages.js 中使用的代码:

router.get("/verify-email", async (req,res) => {
    var tokens = req.query.token
    console.log(tokens)
    const verified = await emailverification(tokens)
    console.log("hello",verified)
    if (verified == 1) {
        res.sendFile('verifySuccess.html',{root: "./public"});
    } else {
        res.sendFile('verifyFail.html',{root: "./public"});
    }
})

这是它必须等待的功能:

const emailverification = async(token,req,res,next) => {
    var tokens = token
    console.log("hello",tokens)
    db.query('SELECT * FROM users WHERE token = ?',[tokens], async(err, result) =>{
        console.log("1")
        if (err) throw err;
        console.log(result)
        
        if(result[0].verify == "0"){
            console.log("2")
            console.log(result[0].email)
            if (result.length > 0) {
                console.log("2.5")
                var email = result[0].email
                console.log(email)
                console.log("2.75")
                db.query('UPDATE users SET verify = 1 WHERE email = ?', email, async(err, result) => {
                    console.log(result[0])
                    console.log("3")
                    if(err) throw err 
                    return 1
                })
              
            } else {
                console.log("5")
                return 0;
            }
         }else{
            console.log("6")
            return 0;
         }
    })
}
module.exports = emailverification;

我在 google 和 stackoverflow 上进行了搜索,发现了很多关于此的内容,但它在我的代码中不起作用。 这是源代码:the source code

以下2个问题: how-do-i-return-the-response-from-an-asynchronous-callhow-to-properly-return-a-result-from-mysql-with-node 没有帮助,因为这些问题是关于其他问题的,而不是关于我遇到的问题

请不要介意我使用它们来查看运行和不运行的所有日志,

【问题讨论】:

    标签: javascript node.js express async-await


    【解决方案1】:

    你必须这样返回。

    const emailverification = async(token,req,res,next) => {
        var tokens = token
        console.log("hello",tokens)
        return db.query('SELECT * FROM users WHERE token = ?',[tokens], async(err, result) =>{
            console.log("1")
            if (err) throw err;
            console.log(result)
            if(result[0].verify == "0"){
                console.log("2")
                console.log(result[0].email)
                if (result.length > 0) {
                    console.log("2.5")
                    var email = result[0].email;
                    console.log(email)
                    console.log("2.75")
                    return db.query('UPDATE users SET verify = 1 WHERE email = ?', email, async(err, result) => {
                        console.log(result[0])
                        console.log("3")
                        if(err) throw err 
                        return 1
                    })
                  
                } else {
                    console.log("5")
                    return 0;
                }
             }else{
                console.log("6")
                return 0;
             }
        })
    }
    module.exports = emailverification;
    

    【讨论】:

    • 我试过了,它仍然不等待事情,result[0] 不是未定义的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2014-03-29
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    相关资源
    最近更新 更多