Есть небольшой сайт с блогом. Фронт на
Nuxt 3. Бэкенд -
Directus (headless cms). Для связи с бэком на Nuxt добавлено дополнение "nuxt-directus". Фронт с бэком расположены на разных поддоменах. В принципе все работает, контент на Nuxt из бэкенда выводится. Но есть один "затык" - в Directus посты блога создаются с адресами, типа
my-site.com/blog/1 ,
my-site.com/blog/2 и т.д. А я хочу "человеческие" адреса типа
my-site.com/blog/my-post. Для этого я создал поле "slug", которое вместе с другим контентом "отдается" бэком в JSON. Нагуглил и перепробовал кучу разных способов как выполнить замену ID на slug, но пока решить вопрос не удалось. При попытке вывести страницу со "slug" браузер выдает
ошибку 500. Дело, конечно, усугубляется тем, что я пока еще слабо знаю код, разбираюсь в Nuxt и в теме обмена данными по API. Как я понял сложность в том, что в Directus ID созданного поста становится в БД его
Primary Key. Чтобы выполнить замену мне советовали создать фильтр подобного вида:
var items = await getItems({
collection: "blog",
params: {
filter: { slug: "SLUG" }
},
});
ну и плюс к этому я изменил страницы на фронте с
[...id].vue на
[slug].vue, но ничего не получилось. В настоящее время для выводов постов с ID на фронте (на странице
[...id].vue) используется следующий код:
<script setup>
const { getItemById } = useDirectusItems();
const route = useRoute();
const post = await getItemById({ collection: "blog", id: route.params.id });
</script>
Если кто-то сталкивался с подобным - посоветуйте как это можно решить.