Я работаю с Node.js (экспресс) и MySQL, и у меня возникли проблемы с попыткой сделать несколько запросов по одному и тому же маршруту. Выдает следующую ошибку:
Can't set headers after they are sent.
И мой код такой:
router.post('/test', function (req, res, next){
db.query("select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where
TABLE_NAME = 'registros';", function (error, results, fields) {
if (error) throw error;
res.render('test', {
columnNames: results
});});
db.query("SELECT * FROM registros", function (error, resp, fields) {
if (error) throw error;
res.render('test', {
dataRegistros: resp
});});
});
Я понимаю, что это может быть потому, что он выполняется дважды по одному и тому же маршруту. Каким будет правильный способ сделать несколько SQL-запросов и вернуть их в видимый файл?
С Уважением!






Согласно драйвер mysql nodejs вы можете настроить его для объединения запросов и возврата массива с результатами
Вы должны установить это при создании соединения:
mysql.createConnection({multipleStatements: true});
Затем сделайте запрос с обоими запросами
router.post('/test', function (req, res, next) {
var queries = [
"select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'registros'",
"SELECT * FROM registros"
];
db.query(queries.join(';'), function (error, results, fields) {
if (error) throw error;
res.render('test', {
columnNames: results[0], // First query from array
dataRegistros: resp // Second query from array
});
});
});
Но позвольте мне задать вопрос, зачем вам запрашивать имена столбцов, когда на самом деле вы запрашиваете все строки и можете получать столбцы оттуда?
Чтобы сделать несколько запросов из одного маршрута, используйте асинхронная библиотека npm
npm install --save async
затем используйте параллельный метод и функции, чтобы сделать несколько запросов к базе данных с обратным вызовом.
async.parallel({
one: function(callback) {
callback(null, 'abc\n');
},
two: function(callback) {
callback(null, 'xyz\n');
}
}, function(err, results) {
if (error) throw error;
res.render('test', {
columnNames: results.one,
dataRegistros: results.two
});
});
Привет. Причина, по которой я это сделал, была ... просто чтобы поэкспериментировать! Я спросил себя, что произойдет, если мне нужно будет сделать несколько запросов по одному маршруту и отправить их. Я хотел заполнить таблицу html, сначала получив имена столбцов, а затем всю запись для тела таблицы. Спасибо, попробую то, что вы предложили!