Express Router для нескольких маршрутов: лучший способ сохранить маршруты в переменной - PullRequest
0 голосов
/ 22 октября 2019

Я работаю на экспресс-сервере, используя несколько файлов роутера для разных глав сайта. В конце концов, существующие страницы мопса не сильно изменятся, но во время перехода есть некоторый динамический контент, в основном, говорящий «эта страница еще не перенесена (переведена), см. Старую версию в…».

В каждой главе есть либо заданное, либо очень медленно растущее количество страниц. Итак, у меня есть список разрешенных запросов, поступающих с веб-сайта для предоставления ответа, плюс реакция по умолчанию в противном случае.

Я сделал несколько вариантов, и все они работают, но я спрашиваю, не создаст ли какой-либо из них проблему с памятью, если одновременно будет много требований. Если так, что было бы хорошей практикой?

  • Я довольно новичок в 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'});
})

Ищите советы по хорошей практике и лучшей версии для хранения списков. Массив массивов, объекты объектов, внутри функций маршрутизатора, ...

...