【问题标题】:Passing data though a mysql callback function to a global variable?通过mysql回调函数将数据传递给全局变量?
【发布时间】:2020-10-12 04:50:09
【问题描述】:

我是 nodejs 的新手,但仍然掌握它的窍门。我希望以下代码将用户传回数​​据库中的变量。当我取回一些数据时,连接和查询工作正常,但我似乎无法将其存储在全局变量中。

在本例中,变量“test_user”有效(就像它在函数本身中一样),但变量“test”无效。

我假设我需要将 async 和 await 放在某个地方,但我不知道在哪里。

let test;

app.get('/testing', (req, res) => {
    res.send("testing area");
    test = getUserByEmail("w@w", function(result) {
        let test_user;
        if(result.length > 0)
        {
            test_user = result[0];
            console.log(test_user); //logs the result ok
        } else {
            test_user = null;
        }
        return test_user;
    });

    console.log(test); //doesn't log the result

    
});


function getUserByEmail(email, callback) {

    const SELECT_QUERY = "SELECT * FROM users WHERE email='"+ email +"'";

    connection.query(SELECT_QUERY, (err, results) => {
        if(err) {
            console.error(err);
        } else {
            return callback(results);
        }
    });
}

【问题讨论】:

    标签: javascript mysql node.js callback asynccallback


    【解决方案1】:

    您正在使用const,这意味着您无法使用= 更改该变量的值。您必须改用let

    【讨论】:

    • 哦,对了,因为您正在尝试 console.log 值而不等待回调函数的完成。如果将 console.log 移动到回调的末尾,您应该会看到所需的结果
    【解决方案2】:

    在get路由中使用async/await:

    app.get('/testing', async (req, res) => {
    
    test = await getUserByEmail("w@w", function(result) {
    

    【讨论】:

    • 现在,它在 '=' 上显示一个错误,说 Invalid left-hand side in assignment
    • 对不起,应该是 test = await getUserByEmail("w@w", function(result) {
    • 很抱歉,在函数运行之前我的全局变量仍然未定义
    • 一开始您没有为变量 test 分配任何值。在数据库查询完成执行之前,它将是未定义的。你是在路由器里面弄的吗?如果您在全球范围内需要它,最好制作单独的异步函数来从数据库中获取用户。
    • 理想情况下,我不想在路由功能中使用它,我正在使用本地密码登录。我已经通过完美地使用用户对象来实现它。现在我正在尝试将 mysql 数据库连接到它。我已经把登记册整理好了。但是,从数据库中提取用户以通过护照是我所在的位置。我在这方面走的是正确的路线?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2013-02-09
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多