Для проекта мне пришлось создать онлайн-экземпляр базы данных с использованием MySQL в экземпляре Google Cloud SQL, а затем создать API-интерфейс для подключения к экземпляру базы данных, чтобы запросить его. Следуя руководству Google (ссылка ниже), я создал REST-API как сервис в редакторе Google Cloud Shell, используя node.js. С помощью Cloud Shell я смог создать и развернуть службу, а также создать подключенный к ней облачный экземпляр Run. Если я подключаюсь к базовому получению (см. код ниже), он работает нормально, если я пытаюсь получить информацию из базы данных, я ничего не получаю взамен. Идентификатор сообщения URL-адреса равен 200, запрос считается выполненным или, по крайней мере, он не генерирует ошибку, и после того, как я просто ничего не получаю (если вы видите код ниже, мы должны получить информацию, возвращенную запросом в переменная результатов, но она пуста). Можете ли вы помочь мне понять, чего не хватает?
Вот скрипты, о которых я упоминал выше:
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.info('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"});
});
});пакет.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://thewikihow.com/video__w_idf928WY Я следил за всем, за исключением того, что я использую Cloud 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>',
});
Таким образом, если ваш экземпляр Cloud SQL был назван mysql-экземпляр в регионе us-central1 в рамках проекта с именем и идентификатором мой крутой проект, тогда параметр пути вашего сокета будет следующим:
socketPath: '/cloudsql/my-cool-project:us-central1:mysql-instance'
P.S. Вот исходный код учебника для ссылки на видео, которой вы поделились, если вы хотите сослаться на нее напрямую.
Вы не против уточнить свое решение? Мне любопытно, что вы подразумеваете под «форсированием соединения».
Я думаю, что я плохо объяснил себя в предыдущем сообщении. Я имею в виду, что автоматически при создании образа контейнера также устанавливается вся информация для подключения к базе данных. Я думал, что все остальное на автомате. Вместо этого во время создания службы в настройках соединения соединение Cloud SQL должно быть установлено на базу данных, которую вы собираетесь использовать. Я видел видео, где этот последний шаг был опущен, и все работало одинаково, но не в моем случае.
Мне удалось заставить его работать, принудительно подключившись к базе данных SQL в настройках подключения во время создания службы.
Спасибо за ответы. Но имя экземпляра правильное. Мне удалось заставить его работать, принудительно подключившись к базе данных sql в настройках подключения во время создания службы