Тестирую отправление http-запросов через nodejs в BAS .
Как будто бы кубик nodejs не может выйти в интернет, что оч странно! (см лог)
Вывод в консоль завершается , И соответственно работа nodejs-кубика останавливается на этой последней строке лога (полый лог смотрите ниже):
[Событие] "socket": Сокет назначен запросу.
Полный лог работы nodejs кубика:
[145441036] [12:46:17] Поток №1 : [Шаг 1] Скрипт запущен. Подключаем модуль https.
[145441036] [12:46:17] Поток №1 : [Шаг 2] Создан объект с опциями для запроса.
[145441036] [12:46:17] Поток №1 : [Шаг 3] Объект запроса успешно создан.
[145441036] [12:46:17] Поток №1 : [Шаг 4] Добавляем обработчики событий к запросу...
[145441036] [12:46:17] Поток №1 : [Шаг 5] Обработчики событий добавлены.
[145441036] [12:46:17] Поток №1 : ...
...
[145441036] [12:46:17] Поток №1 : [Шаг 6] Команда req.end() вызвана. Скрипт теперь ожидает ответа от сети...
[145441036] [12:46:17] Поток №1 : [Событие] "socket": Сокет назначен запросу.
nodejs код:
// === ФУНДАМЕНТАЛЬНЫЙ ТЕСТ СЕТИ 2.0 (Node JS / BAS) ===
const https = require('https');
async function main() {
console.log('[Шаг 1] Скрипт запущен. Подключаем модуль https.');
const options = {
hostname: 'www.google.com',
port: 443,
path: '/',
method: 'GET',
headers: { 'User-Agent': 'BAS‑Connectivity‑Test/1.0' },
timeout: 20_000 // 20 секунд
};
console.log('[Шаг 2] Создан объект с опциями для запроса.');
// ------- КРИТИЧЕСКО: BAS должен подождать этот Promise -------
await new Promise((resolve, reject) => {
let req;
try {
req = https.request(options, (res) => {
console.log('[SUCCESS] Получен ответ от сервера!');
console.log('Статус ответа: ' + res.statusCode);
res.on('data', (chunk) =>
console.log(`[data] Получено ${chunk.length} байт.`)
);
res.on('end', () => {
console.log('[end] Ответ полностью получен. Тест УСПЕШЕН.');
resolve();
});
});
console.log('[Шаг 3] Объект запроса успешно создан.');
} catch (e) {
console.error('[FATAL] Не удалось создать запрос: ' + e.message);
reject(e);
return;
}
// ----- Диагностические события запроса -----
req.on('socket', (socket) => {
console.log('[socket] Сокет назначен.');
socket.on('lookup', (err, address, family, host) => {
if (err) {
console.error(`[lookup] DNS‑ошибка для ${host}: ${err.message}`);
} else {
console.log(`[lookup] ${host} → ${address} (IPv${family})`);
}
});
socket.on('connect', () => console.log('[connect] TCP‑соединение установлено.'));
socket.on('secureConnect', () => console.log('[secureConnect] TLS‑рукопожатие завершено.'));
socket.on('error', (e) => console.error('[socket‑error] ' + e.message));
});
req.on('response', () => console.log('[response] Сервер начал отправку данных.'));
req.on('timeout', () => {
console.error('[timeout] 20 секунд истекли — уничтожаем запрос.');
req.destroy(new Error('TIMEOUT'));
});
req.on('error', (e) => {
console.error('[error] ' + e.message);
reject(e);
});
req.on('close', () => console.log('[close] Соединение закрыто.'));