Проблема с Node.js и MySQL
Появилась необходимость связать несколько запросов, причем последующие будут зависеть от результатов предыдущих.
Как пример взял обычные 2 запроса на селект, не могу связать. Первый запрос срабатывает, а на второй валит ошибку
Error2 Cannot enqueue Query after invoking quit.
Подскажите в чем завтык, почему не хочет вызывать второй вложенный запрос?
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'test'
});
connection.query('SELECT * from testtable', function(err, rows, fields) {
if (!err){
console.log('Первый запрос: '+rows);
connection.query('SELECT * from secondtable', function(err2, rows2, fields2) {
if (!err2){
console.log('Второй запрос: '+rows2);
}else{
console.log('Error2 '+err2);
}
});
}else{
console.log('Error1 '+err2);
}
});
Ответ
Необходимо было удалить connection.end() после первого connection.query()
Если это сервер, который крутиться "вечно" то самый простой вариант - держать коннект постоянно. Более сложное, но правильное решение - использовать пул подключений, который будут закрываться сами при простое.
Ну и если подключение нужно редко - лучше сделать открытие соединения по необходимости, выполнение запросов, а после выполнения всех - закрыть.
Если взять Ваш случай (2 запроса), считаем, что их нужно один раз выполнить и забыть - я бы написал как-то так:
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'test'
});
connection.query('SELECT * from testtable', function(err, rows, fields) {
if (err) {
console.error('Error1', err);
return connection.end(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
console.log('Первый запрос:', rows);
connection.query('SELECT * from secondtable', function(err, rows2, fields2) {
connection.end(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
if (!err) {
return console.error('Error2', err);
}
console.log('Второй запрос: ' + rows2);
});
});
Но куда конкретно вставить закрытие соединения - лучше нормально продумать.
П.С. Возможно Вы плохо знакомы с асинхронностью в node.js. Если так - почитайте на эту тему.
Комментариев нет:
Отправить комментарий