Маршрутизация NextJS не работает при развертывании, но работает при использовании моего локального сервера

#reactjs #next.js

#reactjs #next.js

Вопрос:

У меня есть следующий URL:

 /job/engineer_123456/edit/abcde
 

Теперь, когда я запускаю свой локальный сервер: npm run dev («next src /»), тогда, когда я перехожу по этой ссылке, она работает. Однако, когда я развертываю свой проект (в firebase), я получаю 404 с этого URL.

У меня такое чувство, что в маршрутизации есть конфликт, поскольку моя структура каталогов страниц NextJS выглядит так / задание находится в разделе страницы):

введите описание изображения здесь

Может ли быть так, что по какой-то причине, когда я перехожу по этой ссылке, я собираюсь /job/[job].js вместо /job/[job]/edit/[editId].js

Я действительно смущен, почему production показывает страницу 404, но локально она работает.

Комментарии:

1. а? какое это имеет отношение к этому?

Ответ №1:

Согласно документации:

Предопределенные маршруты имеют приоритет над динамическими маршрутами, а динамические маршруты — над всеми маршрутами. Взгляните на следующие примеры:

pages/post/create.js — Будет соответствовать / публиковать / создавать

pages/post/[pid].js — будет соответствовать /post/1 , /post/abc и т.д. Но не / post / create

pages/post/[…slug].js — будет соответствовать /post/1 / 2 , /post/a/b / c и т.д. Но не /post/create, /post/abc

* Страницы, которые статически оптимизированы с помощью автоматической статической оптимизации, будут удалены без предоставления параметров их маршрута, т.е. Запрос будет пустым объектом ({}).

После гидратации, Next.js вызовет обновление вашего приложения для предоставления параметров маршрута в объекте запроса.*

Итак, вам нужно иметь что-то вроде:

 pages - folder
    job - folder
        [...slug] - folder
            - index.js
            edit - folder
                - index.js
 

папка slug будет действовать как «шаблон» для всех маршрутов / job / [slug], которые будут иметь index.js а также страница редактирования

Комментарии:

1. Результаты затем в Error: Catch-all must be the last part of the URL.

2. Извините, на самом деле, поскольку вам нужен идентификатор редакции , у вас должен быть […slug.js ] внутри вашей папки редактирования! Это перехватило бы все идентификаторы и index.js в идеале это была бы индексная страница со всеми объектами