Я запускаю веб-сайт node Express на своем компьютере с OS X локально.
Мне нужно подключиться по ssh к удаленной базе данных mysql, чтобы я мог начать писать к ней запросы.
Теперь я могу подключиться по ssh к нашему удаленному серверу (на котором запущена база данных mysql) в облаке, когда я делаю это через свой терминал OS X Yosemite.
Но мне не удалось сделать это в коде с помощью промежуточного программного обеспечения узла node-mysql и туннеля-ssh.
Мой код работает, но на самом деле не выдает ошибок, за исключением моего GET при отладке моего экспресс-приложения в Webstorm.
Некоторые факты:
Я могу использовать SSH в mySQL из OS X, используя эту команду:
ssh -L 3306:127.0.0.1:3306 ourCloudServerName.net MyUserNameЗдесь
Затем я могу подключиться к mySQL, используя следующую команду:
mysql -h localhost -p -u имя_пользователяздесь
Когда я нахожусь в командной строке mysql и набираю SHOW GLOBAL VARIABLES LIKE 'PORT', я получаю, что сервер (или база данных, я думаю, это означает... не уверен) работает на порту 3306
Я отлаживаю через Webstorm 10.0.3. Это означает, что я отлаживаю свое приложение Node Express, которое начинается так:
вар порт = 3000;
app.set('порт', порт);
app.listen(app.get('port'), function(){ console.log('Веб-сервер Express прослушивает порт' + app.get('port')); })
- I can run my express app via localhost:3000 in Chrome
Теперь это моя первая попытка использовать как node-mysql, так и туннель-ssh
mysqlConfig.js
var databaseConfig = module.exports = function(){};
module.exports = {
mySQLConfig: {
host: '127.0.0.1',
username: 'root',
password: 'rootPassword',
database: 'SomeDatabaseName',
port: 3306,
timeout: 100000
},
sshTunnelConfig: {
username: 'myusername',
password: 'mypassword',
host: 'ourCloudServerName\.net',
port: 22,
//localPort: 3306, //4370
//port: 3333,
//localPort: 4370,
dstPort: 3306,
srcHost: 'localhost',
dstHost: 'localhost',
localHost: 'localhost'
}
};
connection.js
var mysql = require('mysql'),
config = require('./mysqlConfig'),
tunnel = require('tunnel-ssh');
var connection = module.exports = function(){};
createDBConnection = function(){
var mysqlConnection = mysql.createConnection({
host: config.mySQLConfig.host,
user: config.mySQLConfig.username,
password: config.mySQLConfig.password,
database: config.mySQLConfig.database,
connectTimeout: config.mySQLConfig.timeout
});
return mysqlConnection;
};
connection.invokeQuery = function(sqlQuery){
var data = undefined;
var sshTunnel = tunnel(config.sshTunnelConfig, function(error, result) {
var sqlConnection = createDBConnection();
sqlConnection.connect(function (err) {
console.log(err.code);
});
sqlConnection.on('error', function (err) {
console.log(err.code);
});
data = sqlConnection.query({
sql: sqlQuery,
timeout: config.mySQLConfig.timeout
}, function (err, rows) {
if (err && err.code) {
console.log("error code: " + err.code)
}
if (err) {
console.error("error stack: " + err.stack)
}
;
if (rows) {
console.log("We have Rows!!!!!!")
}
});
sqlConnection.destroy();
});
return data;
};
маршрутизатор/index.js
var connection = require('../config/database/connection');
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
var sqlStatement = "Select top 10 from someTable";
var rows = connection.invokeQuery(sqlStatement);
});
module.exports = router;
Итак, я пытаюсь выполнить отладку в Webstorm, и либо никогда не получаю хорошую ошибку, напечатанную на консоли, либо, если я это делаю, это типичная ошибка узла. У меня может быть фундаментальная проблема с кодом и/или просто неправильная настройка значений или правильное использование промежуточного программного обеспечения, я просто не знаю, во время отладки это мало что мне говорит. Я просто знаю, что:
1) Я не могу подключиться к серверу через ssh. Соединения показывают 0 в объекте сервера ssh во время отладки
2) объект подключения mysql показывает, что он отключен, никогда не подключался
3) Я также получаю эту ошибку узла в Webstorm при запуске экспресс-сайта, который не сообщает мне jack:
В каком соединении отказано, я запускаю этот веб-сайт через локальный порт 3000. Это говорит о том, что он не может подключиться к ssh? Я понятия не имею здесь. Это не всегда появляется или происходит, это прерывистая ошибка и может быть просто отладкой веб-шторма, когда мне просто нужно снова запустить отладку, и обычно она исчезает ... но может быть взаимосвязана, без понятия.
И вот что имеет мой объект конфигурации, когда я проверяю его во время отладки
И в туннеле-ssh/index.js, строка 70, где он возвращает сервер, который он пытается создать, я вижу, что ssh-соединение отсутствует:
ОБНОВЛЕНИЕ - согласно предложениям из ответов
127.0.0.1
вместоlocalhost
; Я знаю, что они должны быть одинаковыми, но это устраняет еще одну потенциальную проблему. - person Ja͢ck   schedule 05.06.2015