Я отправляю в node массив
function accepting_expenses_array(req, res) {
const expenses_array = req.body;
const expenses_as_numbers = expenses_array.map(Number);
console.log(expenses_as_numbers);
console.log(expenses_as_numbers.length)
pool.query('SELECT MAX(id_work) FROM "works"', (error, maxResult) => {
if (error) {
throw error;
}
const maxIdWork = maxResult.rows[0].max;
const insertQuery = 'INSERT INTO "expenses" (n_plan, type_work_id, printer_id, material_id, performer_id, format_id, n_sheets, n_page, n_ruined) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)';
const values = [
maxIdWork,
expenses_as_numbers[0],
expenses_as_numbers[1],
expenses_as_numbers[2],
expenses_as_numbers[3],
expenses_as_numbers[4],
expenses_as_numbers[5],
expenses_as_numbers[6],
expenses_as_numbers[7]
];
console.log(values);
pool.query(insertQuery, insertValues, (insertError, insertResult) => {
if (insertError) {
throw insertError;
}
response.status(200).json(insertResult.rows);
});
});
}
но вот вся проблема заключатся в том, что этот массив
expenses_as_numbers
может быть различной длины (от 8 до 64 (всегда кратен 8, например: 8, 16, 24, итд и так до 64). и я придумал и реализовал как обращаться с массивом когда его длина составляет 8. И я думал сделать какой-то хитрый метод тип я "откусываю" от первоначального массива длину в 8 и потом проворачиваю всё что мне нужно, потом снова "откусываю" 8 и так пока длина массива не будет 0. Но вот можно ли так в node и как это реализовать я не знаю
P.S. Пока вопрос смотрят придумал вот это
function accepting_expenses_array(req, res) {
const expenses_array = req.body;
const expenses_as_numbers = expenses_array.map(Number);
// Определяем MAX(id_work) из таблицы "works"
pool.query('SELECT MAX(id_work) FROM "works"', (error, maxResult) => {
if (error) {
throw error;
}
const maxIdWork = maxResult.rows[0].max;
// Формируем INSERT-запрос и значения для вставки
let insertQuery = 'INSERT INTO "expenses" (n_plan, type_work_id, printer_id, material_id, performer_id, format_id, n_sheets, n_page, n_ruined) VALUES ';
let values = [];
for (let i = 0; i < expenses_as_numbers.length; i += 8) {
if (i !== 0) {
insertQuery += ', ';
}
insertQuery += `($${i * 8 + 1}, $${i * 8 + 2}, $${i * 8 + 3}, $${i * 8 + 4}, $${i * 8 + 5}, $${i * 8 + 6}, $${i * 8 + 7}, $${i * 8 + 8})`;
// Формируем значения для вставки
values.push(maxIdWork, ...expenses_as_numbers.slice(i, i + 8));
}
console.log(values);
console.log(insertQuery );
}
только это работает не так.
Получаю в консоле
INSERT INTO "expenses" (n_plan, type_work_id, printer_id, material_id, performer_id, format_id, n_sheets, n_page, n_ruined) VALUES ($1, $2, $3, $4, $5, $6, $7, $8), ($65, $66, $67, $68, $69, $70, $71, $72), ($129, $130, $131, $132, $133, $134, $135, $136)
а ожидал получить при длине массива в 24
INSERT INTO "expenses" (n_plan, type_work_id, printer_id, material_id, performer_id, format_id, n_sheets, n_page, n_ruined) VALUES ($1, $2, $3, $4, $5, $6, $7, $8), ($1, $9, $10, $11, $12, $13, $14, $15), ($1, $16, $17, $18, $19, $20, $21, $22)