Как создать человеко-читаемые URL (ЧПУ) в Nuxt 3?

При переходе по ссылке /cities/148 происходит запрос к бэкенду с параметром id, и это работает корректно. Однако, так как у страниц есть алиасы, которые не обязательно уникальны, возникает проблема с поиском в базе данных по алиасу, например, при переходе по /cities/moskow. Нужно ли передавать также id при использовании алиасов для обеспечения совместимости с серверным рендерингом (SSR)?
  • 23 января 2025 г. 13:04
Ответы на вопрос 2
В Nuxt 3 вы можете создавать человеко-читаемые URL (ЧПУ), используя динамические маршруты. Для вашего случая, когда необходимо обращаться по алиасам, вы можете использовать параметры маршрута. Чтобы обеспечить совместимость с серверным рендерингом и эффективно работать с базой данных, стоит передавать как алиас, так и идентификатор.

Вот основные шаги для реализации ЧПУ в Nuxt 3:

1. **Создайте динамический маршрут**: Создайте файл в папке `pages/cities/[id].vue`, где `id` будет динамическим параметром.

2. **Используйте алиас и id**: Вы можете передавать как `id`, так и `alias` в URL. Например, вы можете настроить маршрут `/cities/moskow`, передавая `moskow` как алиас. 

3. **Обработка запросов**: Внутри компонента страницы, используя функцию `asyncData`, вы можете выполнять запрос к вашему бэкенду. Чтобы получить данные как по `id`, так и по `alias`, вы можете использовать оба параметра.

Пример структуры файла на серверной стороне:

```javascript
// pages/cities/[alias].vue
<template>
  <div>
    <h1>{{ city.name }}</h1>
    <!-- Другой контент для города -->
  </div>
</template>

<script setup>
import { useRoute } from 'vue-router';
import { ref } from 'vue';

const route = useRoute();
const city = ref(null);

async function fetchCity() {
  const alias = route.params.alias;
  // Предположим, у вас есть API, который возвращает город по alias
  const response = await fetch(`/api/cities?alias=${alias}`);
  city.value = await response.json();
}

fetchCity();
</script>
```

4. **Использование API для получения city по алиасу**: В вашем бэкенде вы должны обрабатывать запросы по алиасу, чтобы вернуть нужный город. Если у вас уже есть идентификаторы, вы можете получить их из базы данных по алиасу.

5. **SEO и ЧПУ**: Чтобы обеспечить лучшую индексацию поисковыми системами, убедитесь, что ваш сервер правильно обрабатывает запросы с алиасами и возвращает корректные заголовки и метаданные.

Таким образом, вы можете использовать алиасы в URL, но для обеспечения надежной работы и совместимости, стоит использовать и `id` в обработке данных на бэкенде, чтобы избежать возможных конфликтов между алиасами и неуникальными значениями.
Не будет нормального решения. Если данные хранятся под id, то и искать придётся по id. 

Ненормальное решение, это делать запрос на сервер с алиасом для получения по нему id и уже по id вытаскивать данные.

Ещё ненормальное решение, это хранить в наксте некую таблицу сопоставления - id-alias
Похожие вопросы