Мы можем легко создавать серверные приложения React и статические сайты Next.js.
В этой статье мы рассмотрим промежуточное ПО маршрутизации и режим предварительного просмотра с Next.js.
Поддержка промежуточного программного обеспечения Connect / Express
Мы можем использовать связующее ПО, совместимое с Connect.
Например, мы можем добавить промежуточное ПО cors
, установив его и добавив в наше приложение Next.js.
Для его установки запускаем:
npm i cors
or
yarn add cors
Затем мы можем добавить его в наш маршрут API, написав:
import Cors from 'cors' const cors = Cors({ methods: ['GET', 'HEAD'], }) function runMiddleware(req, res, fn) { return new Promise((resolve, reject) => { fn(req, res, (result) => { if (result instanceof Error) { return reject(result) } return resolve(result) }) }) } async function handler(req, res) { await runMiddleware(req, res, cors) res.json({ message: 'hello world' }) } export default handler
Мы импортировали функцию Cors
.
Затем мы используем его для создания cors
промежуточного программного обеспечения.
Мы можем указать методы запроса, которые можно использовать с маршрутом.
Функция runMiddleware
запускает промежуточное программное обеспечение, вызывая fn
функцию промежуточного программного обеспечения, а затем разрешает result
в случае успеха.
В противном случае обещание отклоняется.
handler
- это обработчик маршрута, который запускает промежуточное ПО и затем возвращает ответ.
Помощники ответа
Next.js поставляется с различными помощниками ответа.
Метод res.status(code)
позволяет нам установить код состояния ответа.
code
- это код состояния HTTP.
res.json(json)
позволяет нам отправить ответ в формате JSON.
json
- допустимый объект JSON.
res.send(body)
позволяет нам отправлять HTTP-ответ, где body
- строка, объект или буфер.
res.redirect
принимает необязательные status
и path
, чтобы позволить нам перенаправлять на определенный путь или URL.
Значение по умолчанию status
- 307.
Например, мы можем вызвать их, написав:
export default (req, res) => { res.status(200).json({ name: 'hello' }) }
Их можно связать вместе.
Режим предварительного просмотра
Мы можем предварительно просмотреть маршруты, которые создаются статически.
В Next.js есть функция предварительного просмотра, чтобы решить эту проблему.
Он будет отображать страницы во время запроса, а не во время сборки, и извлекать черновик контента вместо опубликованного контента.
Чтобы использовать его, мы вызываем метод res.setPreviewData
для предварительного просмотра.
Например, мы можем написать:
export default (req, res) => { res.setPreviewData({}) res.end('Preview mode') }
чтобы включить его.
Безопасный доступ к данным
Мы можем получить доступ к данным, записав их из маршрута предварительного просмотра и отправив на нашу страницу.
Для этого мы создаем маршрут API предварительного просмотра, создав файл pages/api/preview.js
:
export default async (req, res) => { const response = await fetch(`https://yesno.wtf/api`) const data = await response.json(); res.setPreviewData(data) res.redirect('/post') }
Мы получаем данные из API и вызываем setPreviewData
, чтобы получить их из функции getStaticProps
в файле JavaScript нашей страницы.
Затем мы перенаправляем в наш файл, чтобы увидеть данные на нашей странице.
В pages/post.js
мы пишем:
function Post({ data }) { return ( <div>{data && data.answer}</div> ) } export async function getStaticProps(context) { if (context.preview) { return { props: { data: context.previewData } } } return { props: { data: { answer: 'not preview' } } } } export default Post
Мы проверяем, включен ли режим предварительного просмотра, проверяя свойство context.preview
.
Если это true
, то мы получаем данные предварительного просмотра от context.previewData
.
Затем мы отображаем data
в нашем Post
компоненте.
Заключение
Мы можем добавить режим предварительного просмотра с Next.js, чтобы мы могли просмотреть результат до того, как он будет запущен.
Кроме того, мы можем использовать промежуточное ПО Connect или Express в наших приложениях Next.js.
Понравилась эта статья? Если да, то получите больше похожего контента, подписавшись на наш канал YouTube!