Я пытаюсь удовлетворить конкретное требование для нашего веб-приложения. У нас есть страница "Предмет", на которой в случае распродажи предмета должна продолжаться отображаться его позиция, но код ответа страницы должен быть установлен на 404. Я пробую что-то вроде этого:

В страницах / [id] /Item.tsx:

static async getInitialProps(ctx) {
   //retrieve item
   if (item.isSoldOut) {
       ctx.res.statusCode = 404;
   }
   //all other stuff
}

Но он будет автоматически перенаправлен на домашнюю страницу с кодом состояния 302. Как добиться такого поведения?

1
al1812 14 Окт 2020 в 09:27

1 ответ

Лучший ответ

В документации Next.js предлагается использовать getStaticProps или getServerSideProps вместо getInitialProps (https://nextjs.org/docs/api-reference/data-fetching/getInitialProps)

Используя getServerSideProps, вы можете сделать следующее

export const getServerSideProps: GetServerSideProps = async ({ req, res }) => {
    res.statusCode = 404;
    return { props: {} }
}

Используя getInitialProps, вы можете сделать следующее:

static async getInitialProps({res}) {
    // server side
    if(res) res.statusCode = 404;

    // client side
    return { statusCode : 4040 }
}
2
dna 14 Окт 2020 в 08:30