【问题标题】:MySQL connection using SSH in Nodejs在 Nodejs 中使用 SSH 连接 MySQL
【发布时间】:2021-05-10 00:32:46
【问题描述】:

我不明白如何通过 ssh 创建 mysql 连接并将其导出以从另一个文件访问。 这是我的 database.js 文件,这里我创建了 ssh 隧道。我需要从我的控制器访问 conn 变量。

const mysql = require("mysql2");
const { Client } = require("ssh2");
const { database, sshConfig, forwardConfig } = require("./keys");

// create an instance of SSH Client
const sshClient = new Client();

const connection = 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 = {
            ...database,
            stream,
          };
          var conn = mysql.createConnection(updatedDbServer);
          conn.connect(function (err) {
            if (err) {
              reject(err);
            } else {
              resolve(conn);
            }
          });
        }
      );
    })
    .connect(sshConfig);
});

module.exports = connection;

但是当我在我的 controller.js 文件中使用连接时,显示“TypeError: connection.query is not a function”

const connection = require("../db/database");
    
function getUsers(req, res) {
  try {
    let sqlQuery = `Select * from sUsers`;
    console.log(connection);
    connection().then((conn) => {
      // query database

      conn.query(sqlQuery, (error, results) => {
        if (error) {
          console.log(error);
          return;
        }
        res.json({
          ok: true,
          results,
        });
      });
    });
  } catch (err) {
    console.log(`Error1: ${err}`);
    return res.status(400).json({
      ok: false,
      err,
    });
  }
}

【问题讨论】:

    标签: mysql node.js ssh


    【解决方案1】:

    connection 是一个承诺。您需要先等待它被解决或拒绝。如果已解决,那么您需要使用传递给then() 处理程序的实际连接对象。

    另外,我猜你打算在成功连接到数据库服务器时使用resolve(conn) 而不是resolve(connection)(并且return conn 是不必要的,因为返回值会被忽略)。

    最后,因为module.exports 是一个包含 connection 的对象,你要么需要更改为module.exports = connection;,要么在controller.js 中使用const { connection } = require("../db/database");

    【讨论】:

    • 我已完成所有更改,但我不断收到错误“连接不是函数”
    • connectionPromise,而不是函数。
    猜你喜欢
    • 2014-03-20
    • 1970-01-01
    • 2018-04-05
    • 2021-11-22
    • 2016-06-27
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多