Я работаю на экспресс-сервере, используя несколько файлов роутера для разных глав сайта. В конце концов, существующие страницы мопса не сильно изменятся, но во время перехода есть некоторый динамический контент, в основном, говорящий «эта страница еще не перенесена (переведена), см. Старую версию в…».
В каждой главе есть либо заданное, либо очень медленно растущее количество страниц. Итак, у меня есть список разрешенных запросов, поступающих с веб-сайта для предоставления ответа, плюс реакция по умолчанию в противном случае.
Я сделал несколько вариантов, и все они работают, но я спрашиваю, не создаст ли какой-либо из них проблему с памятью, если одновременно будет много требований. Если так, что было бы хорошей практикой?
- Я довольно новичок в Node и не смог выяснить, является ли переменная в модуле глобальной переменной, быстро засоряя память. Проще добавить новые маршруты позже, если списки разделены, но при необходимости они могут быть интегрированы в функции.
Я попытался с массивом строк для имен файлов, где у меня есть только имена файлов, а также с массивом объектов, где у меня есть имена файлов и временное содержимое. маршрутизатор извлекает имя файла из запроса и сравнивает его с переменными. Если он существует, он обслуживает или создает этот файл.
//Version array. (Past and future refer to the chronological order
// of the events allow to flip through the archive's years with an
//arrow on the pug page. They are defined by the index of the
//filename in the array)
var targets=['2019-1','2018-1'];
var current=targets[0];
router.get('/*',function(req,res) {
// get the name of the archive page from the link clicked
var event = (req.params[0]);
if( targets.includes(event) ) {
res.render('archive/'+event, {
title:'xyzzy - event in 20'+event,
message: 'page '+event+' coming soon ',
event:event ,
past: targets[targets.indexOf(event)+1],
future: targets[targets.indexOf(event)-1] || current
});
} else {
res.render('archive/'+current,
{title:'xyzzy - Events',
message: 'no event for '+event+ '.' });
}
});
//Second version: several arrays of objects, one per language
var etargets=[{c:'englishname',t:'englishtitle'}]
router.get('/*', function(req,res,next){
const cible = (req.params[0]);
var target = {t:'default title'}
var route='default'
...
if (etargets.find( ({c}) => c ===cible) ){
target = etargets.find( ({c}) => c ===cible);
route='e-asso/'+'cible';
...
}
...
res.render(route,{title:target.t ||'rien'});
})
Ищите советы по хорошей практике и лучшей версии для хранения списков. Массив массивов, объекты объектов, внутри функций маршрутизатора, ...