function createValuesTemplate(length) {
const numColumns = 9;
const placeholders = [];
let placeholderIndex = 1;
for (let i = 0; i < length; i++) {
let rowPlaceholders = [];
for (let j = 0; j < numColumns; j++) {
rowPlaceholders.push('$' + placeholderIndex++);
}
placeholders.push('(' + rowPlaceholders.join(', ') + ')');
}
return placeholders.join(', ');
}
async function accepting_expenses_array(req, res) {
const expenses_array = req.body;
const expenses_as_numbers = expenses_array.map(Number);
console.log("expenses_as_numbers",expenses_as_numbers)
try {
// Первое число - id_order. Ищем максимальный id_work
const results = await pool.query('SELECT id_work FROM "works" WHERE id_order = $1', [expenses_as_numbers[0]]);
const work_id_array = results.rows.map(row => row.id_work);
const work_id_max = Math.max(...work_id_array);
console.log("work_id_max",work_id_max)
const expensesWithoutFirst = expenses_as_numbers.slice(1); // Игнорируем первый элемент, id_order
const newExpensesArray = [];
for (let i = 0; i < expensesWithoutFirst.length; i += 8) {
// Добавляем work_id_max в начало каждой строки значений
newExpensesArray.push(work_id_max, ...expensesWithoutFirst.slice(i, i + 8));
}
console.log("newExpensesArray",newExpensesArray)
if (newExpensesArray.length % 9 !== 0) {
return res.status(400).json({
success: false,
error: 'Количество элементов в массиве расходов должно быть кратным числу столбцов таблицы (включая work_id_max).'
});
}
// Подготовка SQL запроса на вставку
const insertQuery = `INSERT INTO "expenses" (
n_plan,
type_work_id,
printer_id,
material_id,
format_id,
performer_id,
n_sheets,
n_page,
n_ruined
) VALUES ${createValuesTemplate(newExpensesArray.length / 9)};;`
console.log("createValuesTemplate(newExpensesArray.length / 9)",createValuesTemplate(newExpensesArray.length / 9))
// Выполняем запрос на вставку с newExpensesArray
const insertResult = await pool.query(insertQuery, newExpensesArray);
console.log("insertResult",insertResult);
// Отправляем успешный ответ
return res.json({ success: true, message: 'Данные успешно добавлены.' });
} catch (error) {
// Логирование ошибки и отправка ошибочного ответа
console.error('Error during query execution:', error.stack);
return res.status(500).json({
success: false,
error: error.message
});
}
}
1. Добавить новые конфигурации сайта в общий файл nginx conf.можно примерно таким образом.
const fs = require('fs');
const path = require('path');
const nginxConfPath = '/etc/nginx/nginx.conf'; // путь к вашему файлу nginx.conf
// Чтение содержимого nginx.conf
const nginxConfContent = fs.readFileSync(nginxConfPath, 'utf8');
// Дополнение новыми настройками
const newConfig =
server {
listen 80;
server_name example.com;
location / {
root /path/to/new/website;
index index.html;
}
}
;
const updatedNginxConfContent = nginxConfContent + newConfig;
// Запись измененного содержимого обратно в файл nginx.conf
fs.writeFileSync(nginxConfPath, updatedNginxConfContent, 'utf8');
2. Создать папку сайта.
const newWebsitePath = '/path/to/new/website'; // путь к новой папке сайта
// Создание папки
fs.mkdirSync(newWebsitePath);
Всё это слишком абстрактно, сложно материализующее в голове понятия... Скажем, есть к примеру хост-провайдер, предоставляющие место для сайта. Он же использует тот же http запрос для отдачи нам нужных файлов? Или взять к примеру php... Про него не говорят, что с его помощью нужно создать веб-сервер?
что такое веб сервер?
TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Socket'
| property 'parser' -> object with constructor 'HTTPParser'
--- property 'socket' closes the circle
)function loadSelectOptions2(url, selectElement) {
fetch(url)
.then(response => response.json())
.then(data => {
data.forEach(item => {
const option = createOption(item.printer_id, item.material);
selectElement.appendChild(option);
});
})
.catch(error => {
console.error(error);
// Обработать ошибку
});
}
selectElement2.addEventListener('change', () => {
const selectedPrinterId = selectElement2.value;
console.log('selectedPrinterId:', selectedPrinterId);
// Очистить select3 перед загрузкой новых опций
selectElement3.innerHTML = '';
// Загрузить опции для select3 на основе выбранного значения select2
if (selectedPrinterId) {
const url = `http://:3000/printer_material?printer_id=${encodeURIComponent(selectedPrinterId)}`;
loadSelectOptions2(url, selectElement3);
}
});
const http = require('http');
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const db = require('./pool');
const app = express();
const port = 3000;
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: true,
})
);
app.use(cors());
app.get('/printer_material', (req, res) => {
const printer_id = parseInt(req.query.printer_id, 10);
console.log('Received printer_id:', printer_id); // Вывод значения в консоль как число
db.getPrinter_material(printer_id, res);
});
http.createServer(app).listen(port, () => {
console.log(`App running on port ${port}.`);
});
//pool.js
const { response } = require('express');
const Pool = require('pg').Pool;
const pool = new Pool({
user: '',
host: '',
database: '',
password: '',
port: 5432,
});
const getPrinter_material = (printer_id, response) => {
console.log('Received printer_id:', printer_id);
pool.connect((error, client, release) => {
if (error) {
throw error;
}
const query = {
text: `SELECT pr.printer_id, m.material FROM printer_material pm JOIN printer pr ON pm.printer_id = pr.printer_id JOIN material m ON pm.material_id = m.material_id WHERE pr.printer_id = $1`,
values: [printer_id],
};
console.log('Query text:', query.text);
client.query(query, (error, results) => {
release();
if (error) {
throw error;
}
console.log(results.rows);
response.json(results.rows);
});
});
};
module.exports = {
getPrinter_material,
};
console.log
пока они остались так как я часть за частью проверял работоспособность кода