Http.get в большинстве случаев не работает, а file_get_contents не дает сбоя. Что я делаю не так с моим сценарием узла?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Http.get в большинстве случаев не работает, а file_get_contents не дает сбоя. Что я делаю не так с моим сценарием узла?

Сообщение Anonymous »

Я использую узел для загрузки данных с эстакады. Я постоянно получаю ошибки (см. ниже), однако, если я использую file_get_contents в codeigniter, я никогда не получаю никаких ошибок и данные загружаются без проблем. Мне интересно, что я делаю не так с моим сценарием узла? Я даже добавил больше попыток загрузки и увеличил время ожидания, но безуспешно.
Это мой скрипт узла:
const fs = require('fs');
const path = require('path');
const http = require('http');

// Overpass API URL and query
const overpassUrl = 'http://overpass-api.de/api/interpreter';
const query = '[out:xml][timeout:25];area(3600382313)->.searchArea;(nwr["landuse"="winter_sports"](area.searchArea););out geom;';

// Path for the temporary XML file
const xmlFilePath = path.join(__dirname, '../writable/ski/sknowed_calcs/aa_winter_sports_polygons.xml');

// Maximum number of retries
const maxRetries = 3;

// Function to fetch data
function fetchData(retries = 0) {
console.log(`Fetching data from Overpass API... (Attempt ${retries + 1}/${maxRetries})`);

// Encode query for URL
const url = `${overpassUrl}?data=${encodeURIComponent(query)}`;

// Send HTTP GET request with increased timeout
http.get(url, { timeout: 220000 }, (res) => {
res.setEncoding('utf8'); // Ensure response is treated as UTF-8

if (res.statusCode !== 200) {
console.error(`Failed to fetch data: ${res.statusCode} ${res.statusMessage}`);
res.resume(); // Consume response to free up memory
return;
}

let xmlData = '';

// Collect data chunks
res.on('data', (chunk) => {
xmlData += chunk;
});

// When the entire response is received
res.on('end', () => {
console.log('Data fetched successfully.');

// Ensure directory exists
fs.mkdirSync(path.dirname(xmlFilePath), { recursive: true });

// Save the XML response to a file with UTF-8 encoding
fs.writeFileSync(xmlFilePath, xmlData, 'utf8');
console.log(`XML file saved at ${xmlFilePath}`);
});
}).on('error', (error) => {
if (error.code === 'ETIMEDOUT' && retries < maxRetries - 1) {
console.error(`Request timed out. Retrying... (${retries + 1}/${maxRetries})`);
setTimeout(() => fetchData(retries + 1), 5000); // Retry after 5 seconds
} else {
console.error('Request failed:', error);
}
});
}

// Run the function
fetchData();

Вот какую ошибку я получаю:
Fetching data from Overpass API... (Attempt 1/3)
Fetching data from Overpass API... (Attempt 2/3)
Fetching data from Overpass API... (Attempt 3/3)

Request timed out. Retrying... (1/3)
Request timed out. Retrying... (2/3)
Request failed: AggregateError [ETIMEDOUT]:
at internalConnectMultiple (node:net:1139:18)
at internalConnectMultiple (node:net:1215:5)
at Timeout.internalConnectMultipleTimeout (node:net:1739:5)
at listOnTimeout (node:internal/timers:616:11)
at process.processTimers (node:internal/timers:549:7) {
code: 'ETIMEDOUT',
[errors]: [
Error: connect ETIMEDOUT 162.55.144.139:80
at createConnectionError (node:net:1675:14)
at Timeout.internalConnectMultipleTimeout (node:net:1734:38)
at listOnTimeout (node:internal/timers:616:11)
at process.processTimers (node:internal/timers:549:7) {
errno: -110,
code: 'ETIMEDOUT',
syscall: 'connect',
address: '162.55.144.139',
port: 80
},
Error: connect ENETUNREACH 2a01:4f8:261:3c4f::2:80 - Local (:::0)
at internalConnectMultiple (node:net:1211:16)
at Timeout.internalConnectMultipleTimeout (node:net:1739:5)
at listOnTimeout (node:internal/timers:616:11)
at process.processTimers (node:internal/timers:549:7) {
errno: -101,
code: 'ENETUNREACH',
syscall: 'connect',
address: '2a01:4f8:261:3c4f::2',
port: 80
},
Error: connect ETIMEDOUT 65.109.112.52:80
at createConnectionError (node:net:1675:14)
at Timeout.internalConnectMultipleTimeout (node:net:1734:38)
at listOnTimeout (node:internal/timers:616:11)
at process.processTimers (node:internal/timers:549:7) {
errno: -110,
code: 'ETIMEDOUT',
syscall: 'connect',
address: '65.109.112.52',
port: 80
},
Error: connect ENETUNREACH 2a01:4f9:3051:3e48::2:80 - Local (:::0)
at internalConnectMultiple (node:net:1211:16)
at Timeout.internalConnectMultipleTimeout (node:net:1739:5)
at listOnTimeout (node:internal/timers:616:11)
at process.processTimers (node:internal/timers:549:7) {
errno: -101,
code: 'ENETUNREACH',
syscall: 'connect',
address: '2a01:4f9:3051:3e48::2',
port: 80
}
]
}

А это мой скрипт codeigniter4, который никогда не дает сбоев:
public function osm_get_aa_winter_sports_polygons(){

helper('filesystem');
$query_get_skiArea = urlencode('[out:xml][timeout:25];area(3600382313)->.searchArea;(nwr["landuse"="winter_sports"](area.searchArea););out geom;');
$overpass = 'http://overpass-api.de/api/interpreter? ... et_skiArea;
$html = file_get_contents($overpass);
if (write_file(WRITEPATH. "/ski/osm_data/temp_aa_winter_sports_polygons.xml", $html)){
if (file_exists(WRITEPATH.'/ski/osm_data/aa_winter_sports_polygons.geojson')) {
$fileD = "aa_winter_sports_polygons.geojson.".date('m-d-Y-H-i-s'); //A e
@rename(WRITEPATH.'ski/osm_data/aa_winter_sports_polygons.geojson', WRITEPATH.'ski/'.$fileD);
}
exec('osmtogeojson '.WRITEPATH.'/ski/osm_data/temp_aa_winter_sports_polygons.xml > '.WRITEPATH.'/ski/osm_data/aa_winter_sports_polygons.geojson');
return redirect()->to('/admin/ski/osm_data')
->with('info', 'Success - aa_winter_sports_polygons data');
} else {
// dd($TaskResult);
$error = "something happened Harry";
return redirect()->back()
->with('errors', $error)
->with('warning', 'Invalid Data')
->withInput();
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... hat-am-i-d
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Не удалось разрешить «ZIP_Open»: /Applications/Android Studio.app/Contents/jbr/Contents/Home/lib/libzip.dylib
    Anonymous » » в форуме Android
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous
  • Не удалось разрешить "ZIP_OPEN":/Applications/Android Studio.app/contents/jbr/contents/home/lib/libzip.dylib
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • React Native File File File File Error Type Ошибка ошибки
    Anonymous » » в форуме Android
    0 Ответы
    58 Просмотры
    Последнее сообщение Anonymous
  • React Native File File File File Error Type Ошибка ошибки
    Anonymous » » в форуме Android
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • React Native File File File File Error Type Ошибка ошибки
    Anonymous » » в форуме Android
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Javascript»