节点 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
返回任何值。此外,我认为您不能同时使用 await
和 callback
作为查询方法。如果库只允许回调,请将所有内容包装在 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);
我正在编写一个脚本,用于在 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
返回任何值。此外,我认为您不能同时使用 await
和 callback
作为查询方法。如果库只允许回调,请将所有内容包装在 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);