Warning: mkdir(): No space left on device in /var/www/hottg/post.php on line 59

Warning: file_put_contents(aCache/aDaily/2025-07-18/post/we_use_js/--): Failed to open stream: No such file or directory in /var/www/hottg/post.php on line 72
👩‍💻 Умный кеш JSON-запросов в файл @Node.JS [ru] | Серверный JavaScript
TG Telegram Group & Channel
Node.JS [ru] | Серверный JavaScript | United States America (US)
Create: Update:

👩‍💻 Умный кеш JSON-запросов в файл

Реализуйте функцию fetchWithCache(url, ttl), которая делает HTTP-запрос по заданному URL (используя https), и кеширует результат в файл.

Если при повторном вызове с тем же URL кеш актуален (время жизни не истекло), функция должна вернуть данные из файла, не обращаясь к сети.

Поведение:

• Результат сохраняется в файл с названием, основанным на URL (можно использовать хеш).

• TTL (time to live) указывается в миллисекундах.

• Если кеш устарел или отсутствует, функция делает реальный HTTP-запрос и обновляет файл.


Решение задачи🔽

const https = require('https');
const fs = require('fs');
const path = require('path');
const crypto = require('crypto');

function fetchWithCache(url, ttl) {
const cacheDir = path.resolve(__dirname, 'cache');
const hash = crypto.createHash('md5').update(url).digest('hex');
const cacheFile = path.join(cacheDir, `${hash}.json`);

if (!fs.existsSync(cacheDir)) {
fs.mkdirSync(cacheDir);
}

return new Promise((resolve, reject) => {
if (fs.existsSync(cacheFile)) {
const { mtimeMs } = fs.statSync(cacheFile);
const now =
Date.now();

if (now - mtimeMs < ttl) {
const cached = fs.readFileSync(cacheFile, 'utf-8');
return resolve(JSON.parse(cached));
}
}

https.get(url, res => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
fs.writeFileSync(cacheFile, data, 'utf-8');
resolve(JSON.parse(data));
});
}).on('error', reject);
});
}

// Пример использования:
fetchWithCache('
https://jsonplaceholder.typicode.com/todos/1', 5000)
.then(data => console.log(data))
.catch(err => console.error(err));

👩‍💻 Умный кеш JSON-запросов в файл

Реализуйте функцию fetchWithCache(url, ttl), которая делает HTTP-запрос по заданному URL (используя https), и кеширует результат в файл.

Если при повторном вызове с тем же URL кеш актуален (время жизни не истекло), функция должна вернуть данные из файла, не обращаясь к сети.

Поведение:

• Результат сохраняется в файл с названием, основанным на URL (можно использовать хеш).

• TTL (time to live) указывается в миллисекундах.

• Если кеш устарел или отсутствует, функция делает реальный HTTP-запрос и обновляет файл.


Решение задачи🔽

const https = require('https');
const fs = require('fs');
const path = require('path');
const crypto = require('crypto');

function fetchWithCache(url, ttl) {
const cacheDir = path.resolve(__dirname, 'cache');
const hash = crypto.createHash('md5').update(url).digest('hex');
const cacheFile = path.join(cacheDir, `${hash}.json`);

if (!fs.existsSync(cacheDir)) {
fs.mkdirSync(cacheDir);
}

return new Promise((resolve, reject) => {
if (fs.existsSync(cacheFile)) {
const { mtimeMs } = fs.statSync(cacheFile);
const now =
Date.now();

if (now - mtimeMs < ttl) {
const cached = fs.readFileSync(cacheFile, 'utf-8');
return resolve(JSON.parse(cached));
}
}

https.get(url, res => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
fs.writeFileSync(cacheFile, data, 'utf-8');
resolve(JSON.parse(data));
});
}).on('error', reject);
});
}

// Пример использования:
fetchWithCache('
https://jsonplaceholder.typicode.com/todos/1', 5000)
.then(data => console.log(data))
.catch(err => console.error(err));
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍1👎1


>>Click here to continue<<

Node.JS [ru] | Серверный JavaScript




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)


Warning: Undefined array key 3 in /var/www/hottg/function.php on line 115

Fatal error: Uncaught mysqli_sql_exception: Can't create/write to file '/tmp/#sql-temptable-a06e-52395f-1fa5.MAI' (Errcode: 28 "No space left on device") in /var/www/hottg/function.php:216 Stack trace: #0 /var/www/hottg/function.php(216): mysqli_query() #1 /var/www/hottg/function.php(115): select() #2 /var/www/hottg/post.php(351): daCache() #3 /var/www/hottg/route.php(63): include_once('...') #4 {main} thrown in /var/www/hottg/function.php on line 216