ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как сделать код при выборке заголовков более правильно?

Всем привет, может у кого уже было подобное и подскажет как про проще все осуществить.

У меня на сайте есть поиск, в котором есть дополнительные настройки, такие как учитывать пользователя, раздел и т.д.
Так как эти страницы по факту разные, было бы глупо запрещать их индексировать поисковикам, по этому хочется создать уникальные заголовки к ним.
Есть GET запросы
1. SEARCH - поисковое слово
2. CATALOG - раздел документа
3. USER - пользователя документа

Было принято решение сделать некий ключ из get запросов по которому делать выборку заголовка из языкового файла
Вот так создаю ключ
function getPageTitleKey(request) {
    return o = ["catalog", "user", "search"].filter(e => Object.keys(request).includes(e)), o.join(".")
}

В результате получаю различные вариации ключа
1. search
2. catalog
3. user
4. search.catalog
5. search.user
6. catalog.user
7. catalog.search.user

Это помогает выбрать из языкового файла правильный заголовок для последующей с ним работы
//ru.js
//....
titles: { 
        "catalog": {
            name: "CATALOG ...."
        },
        "search": {
            name: "SEARCH ....."
        },
        "user": {
            name: "....  USER"
        },
        "catalog.search": {
            name: "SEARCH CATALOG ......"
        },
        "catalog.user": {
            name: "CATALOG от пользователя USER"
        },
        "user.search": {
            name: "SEARCH ..... добавленные пользователем USER"
        },
        "catalog.user.search": {
            name: "SEARCH CATALOG от пользователя USER"
        }
    }
//....


Сама проблема заключается в масштабах, потому что в самом обработчике (search.js) мне нужно через switch создавать заголовки
switch(page_title_key) {
 case "search": return isNameSearch(request)
 case "catalog": return isNameCatalog(request)
 case "catalog.user": return isNameCatalogUser(request)
 //....
}

Ну и уже в самой функции заменяю с помощью replace необходимое значение
По факту раздувается файл search.js, конечно это терпимо, но и не приятно совсем.

Было бы здорово создать midleware и при обращении на страницу поиска подготавливать уже данные выборке заголовков страницы, но проблема в том что в заголовках присутствуют различные данные которые получаю из базы данных.
Мне вот интересно можно ли как то осуществить это с помощью middleware к примеру который будет в request выплевывать функцию с настройками, к примеру

request.titles = function(e, key) {
 return lang[key].name.replace("USER" e.user)
}

А в search.js получать эту функцию производить более простые настройки по передаче данных в request.titles для получения нужного результата?
Ну или вообще какие могут быть альтернативы? Любые мысли по теме будут интересны.
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы