使用 Google 运行 服务查询 mySQL 云 SQL 中托管的数据库时出现问题

issue in querying mySQL db hosted in Cloud SQL with Google Run service

对于一个项目,我必须在 Google Cloud SQL 实例中使用 MySQL 创建一个在线数据库实例,然后创建一个 rest API 来连接数据库实例以便查询它。 按照 Google 的教程(下面的 Link),我使用 node.js 在 Google Cloud Shell 编辑器中创建了 REST-API 作为服务.通过云 Shell 我能够构建和部署该服务,并且我创建了一个连接到它的云 运行 实例。 如果我连接到基本获取(请参阅下面的代码)它工作正常,如果我尝试从数据库中获取信息,我在 return 中什么也得不到。 url 消息 ID 为 200,查询似乎已完成或至少不会产生错误,之后我什么也没得到(如果您看到下面的代码,我们应该得到信息 return由结果变量中的查询编辑,但它是空的)。 你能帮助我了解缺少的内容吗?

这是我上面提到的脚本:

index.js

const express = require("express");
const mysql = require("mysql");
const app = express();

//pool variable
const pool = mysql.createPool({
    user:'username',
    password:'password',
    database:'dbname',
    socketpath:'the instance name given by the instance info page',
});

app.use(express.json());
const port = process.env.PORT || 8080;
app.listen(port, () =>{
    console.log('oraigo rest api listening on port ${port}');
});

// function get to test on port 8080
app.get("/", async (req, res)=>{
    res.json({status:"mario!!"});
});

//app get function to get from db info
app.get("/:user", async (req, res)=>{
    const query = "SELECT * FROM User WHERE id_user=?";
    pool.query(query, [req.params.user], (error, results)=>{
        res.json(results);
        /*if(!results[0]){
            res.json({status:"not fuond"});
        }
        else{
            res.json({status:"ppp"});
        }*/
        //res.json({status:"siamo giusti"});
    });

});

package.json

{
    "name": "namename",
    "version": "1.0.0",
    "description": "info desc",
    "main": "index.js",
    "scripts": {
        "start": "node index.js"
    },
    "author": "Gigi",
    "license": "ISC",
    "dependencies": {
        "express": "^4.17.1",
        "mysql": "^2.18.1"
    }
}

为此,我观看了很多来自 Google Cloud Tech Youtube 频道的视频,尤其是这个:https://www.youtube.com/watch?v=_w_idf928WY 除了我使用的是云 Shell 而不是本地编码(但应该完全相同)

我已经遵循了所有内容

提前致谢。

我认为问题在于您的 socketpath 变量未正确命名和设置。

应该命名为socketPath而不是socketpath,值设置为'/cloudsql/<PROJECT-ID>:<INSTANCE-REGION>:<INSTANCE-NAME>'

注意: <PROJECT-ID>:<INSTANCE-REGION>:<INSTANCE-NAME> 在示例和教程中有时也称为 INSTANCE_CONNECTION_NAME

因此在上下文中,您的池创建应如下所示:

const pool = mysql.createPool({
  user: <YOUR_DB_USER>,
  password: <YOUR_DB_PASS>,
  database: <YOUR_DB_NAME>,
  socketPath: '/cloudsql/<PROJECT-ID>:<INSTANCE-REGION>:<INSTANCE-NAME>',
});

因此,如果您的云 SQL 实例被命名为 mysql-instance,在区域 us-central1,在名称和 ID 为 my-cool-project 的项目中,您的套接字路径参数如下: socketPath: '/cloudsql/my-cool-project:us-central1:mysql-instance'

P.S。如果您想直接引用,这里是您分享的视频 link 的 tutorial source code

在创建服务期间,我设法通过在连接设置中强制连接到 SQL 数据库来使其工作。