节点 mysql select 结果无法存储到变量中

Node mysql select result can't be stored into variable

我正在编写一个脚本,用于在 mysql 数据库中插入和读取信息。我已经完成了第一步,即在数据库上创建寄存器并正常工作,但我在从数据库中读取数据时遇到问题。

我有一个 main.ts 可以调用执行 select/insert 语句的所有函数,还有一个 dao.ts 可以调用与数据库交互的所有函数。

这是我调用函数的代码:

const vehiclesDB = select('SELECT * FROM vehicles', con);
console.log(vehiclesDB);

这始终是 return未定义的。

这是执行 sql 语句的代码:

    export const select = (statement: string, dbConnection: any) => {
    const results = dbConnection.query(statement, function (err, res, fields) {
        if (err) throw err;
        return res;
    });

    return results;
}

如果我在 select 函数内对 res 变量执行 console.log,我可以看到结果行。我尝试将 select 函数的结果变量设置为 return,但我在 main.ts 上看到的是数据库连接详细信息。

这是我正在使用的库,用于通过节点与 mysql 进行交互: https://github.com/mysqljs/mysql

您没有从函数 select 返回任何值。此外,我认为您不能同时使用 awaitcallback 作为查询方法。如果库只允许回调,请将所有内容包装在 Promise:

export const select = (statement: string, dbConnection: any) => {
    return new Promise((resolve, reject) => {
        dbConnection.query(statement, function (err, res, fields) {
            if (err) return reject(err);
            return resolve(res);
        });
    })
}

如果库允许使用 Promises,您可能想试试这个:

export const select = (statement: string, dbConnection: any) => {
    return dbConnection.query(statement);
}

此外,由于您将函数标记为 aync,因此它 returns 是 Promise。调用函数时必须使用await.then()

const vehiclesDB = await select('SELECT * FROM vehicles', con);