【发布时间】:2021-11-10 16:27:52
【问题描述】:
好的,所以我需要通过 SSH 连接到 MySQL 数据库,并且连接工作正常。我能够毫无问题地执行查询。我也可以得到结果并打印出来。问题是,我需要一些更简单的东西,因为我必须向这个数据库发送很多查询。下面是创建与该数据库的连接的承诺的代码。
const SSHConnection = new Promise((resolve, reject) => {
sshClient.on('ready', () => {
sshClient.forwardOut(
forwardConfig.srcHost,
forwardConfig.srcPort,
forwardConfig.dstHost,
forwardConfig.dstPort,
(err, stream) => {
if (err) reject(err);
const updatedDbServer = {
...dbServer,
stream
};
const connection = mysql.createConnection(updatedDbServer);
connection.connect((error) => {
if (error) {
reject(error); // Return error
}
resolve(connection); // OK : return connection to database
});
});
}).connect(tunnelConfig);
});
然后我有这段代码可以让我访问所述连接并允许我发送查询。问题是我需要查询的返回值,并且能够在我的项目的其他模块中使用它。例如,导出单个函数以用于发送查询,如sendQuery('Enter SQL here')。
function sendQuery(sql) {
SSHConnection.then(
function(connection) {
connection.query(
sql,
function(err, results, fields) {
return results; // <---------- I want to return this from the function 'sendQuery()'
}
);
},
function(error) {
console.log("Something wrong happened");
}
);
}
我可以使用SSHConnection.then() 中的结果,但这对我来说不起作用。
我想在下面有类似的工作。
// Main function
(async function() {
let res = sendQuery(`SELECT 23+2 AS Sum;`);
console.log(res); // Outputs Sum: 25
})();
所以我的问题。有没有办法从外部访问 promise.then() 内部的查询结果?
【问题讨论】:
标签: javascript mysql node.js ssh-tunnel