#javascript #reactjs #axios #next.js
#javascript #reactjs #axios #next.js
Вопрос:
Я использую динамическую маршрутизацию в своем приложении. Вот структура папок, с которой я работаю
-pages
-department
-[slug].js
Теперь я хочу показать страницу, если только значение slug cse, eee, swe, english e.t.c
равно, в противном случае я хочу показать 404 Not Found
страницу. Есть ли какой-либо способ установить массив имен маршрутов? Затем, если значение slug (которое я могу получить с помощью getServerSideProps
) включено в этот массив, я буду обслуживать страницу, в противном случае обслуживать 404 Not Found
страницу.
Зачем мне это нужно?
В getServerSideProps
функции я получаю данные из конечной точки api. В этом случае, если значение slug не включено в конечную точку api, сервер выдает Request failed with status code 501
ошибку! Итак, если значение slug равно cse
, конечная точка api доступна, и я могу получить данные. Если значение slug равно anything or xyasdfs
, конечная точка api недоступна, и я не могу получить данные, и сервер выдает следующую ошибку.
Ответ №1:
я бы проверил в своем компоненте свойство в теле моего ответа .. например, если у всех отделов есть имя, затем проверьте его, если оно не существует, затем верните 404.
Ответ №2:
Для рендеринга со стороны сервера должно быть что-то вроде этого
Page.getInitialProps = async ({query}) => {
if(query.slug == 'cse') {
//codes
}
}
или вы можете использовать next Router hook
https://nextjs.org/docs/routing/dynamic-routes
Комментарии:
1. Я делаю это вручную, сравнивая значение slug, но я ищу лучшее решение.