Я реализовал несколько простое решение для кэширования, которое в основном кэширует zip-файлы, запрашиваемые с указанного c URL. Причина, по которой я это делаю, заключается в том, что я не буду вызывать столько трафика c на основной сайт, с которого я запрашиваю данные. Единственная непосредственная проблема, которую я заметил, состоит в том, что в настоящее время я делаю два запроса на сайт, один для проверки правильности полученного ответа, а другой для фактического запроса данных. Есть ли простой способ объединить два? Я совершенно новичок в express, и синтаксис для меня довольно странный.
Основной код
app.use('/logapi', CacheMiddleware, function (req, res, next) {
console.log("Api Request made for http://logs.tf/logs" + req.url)
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET, PUT, PATCH, POST, DELETE");
res.header("Access-Control-Allow-Headers", req.header('access-control-request-headers'));
request("http://logs.tf/logs" + req.url, function (error, response, body) {
if ((response && response.statusCode) == 200) {
let writeStream = fs.createWriteStream(zipCachePath + req.url);
console.log("saving file");
req.pipe(request("http://logs.tf/logs/" + req.url)).pipe(writeStream);
writeStream.close;
}
else {
console.log("Error received")
next();
}
}).pipe(res);
});
Промежуточное программное обеспечение
let CacheMiddleware = (req, res, next) => {
if (fs.existsSync(zipCachePath + req.url)) {
console.log("Found File" + req.url + " in Cache. Sending...")
res.sendFile(zipCachePath + req.url)
}
else{
next();
}
}
Если есть какие-либо другие возможные оптимизации, пожалуйста, дайте мне знать! (Возможно, запись в файл может быть улучшена)
Заранее спасибо!