Доступ к API из CMS в Next. js - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь получить доступ к конечной точке в следующем. js с безголового прокси-сервера cms в node.js, и я не могу заставить его работать. Я хочу перенаправить меня на сайт, но вместо этого получаю следующую ошибку:

Для получения справки см .: https://nodejs.org/en/docs/inspector (узел: 8549) UnhandledPromiseRejectionWarning: Ошибка: запрос не выполнен с кодом состояния 500 в createError (/home/george/Documents/Coding/NodeJs/node-server/node_modules/axios/lib/core/createError.js:16:15) при поселении (/ home / george / Documents / Coding / NodeJs / node-server / node_modules / axios / lib / core / Set. js: 17: 12) в IncomingMessage.handleStreamEnd (/ home / george / Documents / Coding / NodeJs / node-server / node_modules / axios / lib / adapters / http. js: 236: 11) в IncomingMessage.emit (events. js: 322: 22) в endReadableNT (_stream_readable. js: 1187: 12) в processTicksAndRejection (internal / process / task_queues . js: 84: 21) (узел: 8549) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за выброса внутри функции asyn c без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). Чтобы завершить процесс узла при отклонении необработанного обещания, используйте флаг CLI --unhandled-rejections=strict (см. https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (идентификатор отказа: 2) (узел: 8549) [DEP0018] DeprecationWarning: необработанные отклонения обещаний устарели. В будущем необработанные отклонения обещаний завершат процесс Node.js с ненулевым кодом выхода. (узел: 8549) UnhandledPromiseRejectionWarning: ошибка: запрос завершился неудачно с кодом состояния 500 в createError (/home/george/Documents/Coding/NodeJs/node-server/node_modules/axios/lib/core/createError.js:16:15 ) при урегулировании (/home/george/Documents/Coding/NodeJs/node-server/node_modules/axios/lib/core/settle.js:17:12) в IncomingMessage.handleStreamEnd (/ home / george / Documents / Coding /NodeJs/node-server/node_modules/axios/lib/adapters/http.js:236:11) в IncomingMessage.emit (events. js: 322: 22) в endReadableNT (_stream_readable. js: 1187 : 12) в processTicksAndRejection (internal / process / task_queues. js: 84: 21) (node: 8549) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за выброса внутри функции asyn c без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). Чтобы завершить процесс узла при отклонении необработанного обещания, используйте флаг CLI --unhandled-rejections=strict (см. https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (идентификатор отказа: 4)

Прокси localhost: 4000

app.get("/test", (req, r, next) => {
  Axios.get('http://localhost:3000/api/hello').then((res)=>{

  })
});

Далее. js привет конечной точки. js localhost: 3000

export default (req, res) => {
  res.statusCode = 200;
  res.redirect('https://youtube.com');
};

1 Ответ

0 голосов
/ 03 августа 2020

Поместите свой код в блок try/catch и, вероятно, вы получите такую ​​ошибку: res.redirect не является функцией . Какую следующую версию вы используете? Вы уверены, что в вашей версии поддерживается помощник redirect response? (я думаю, что это доступно только в последней версии - 9.5)

Кстати, вы все равно можете использовать writeHead вместо:

res.writeHead(302, {
  Location: "https://youtube.com",
})
res.end()

Edit

Если вы хотите перенаправить в свой прокси-сервер, вы можете сделать что-то вроде этого:

Далее. js привет конечной точки. js localhost: 3000

export default (req, res) => {
 res.json({url : "www.youtube.com"})
};

Прокси localhost: 4000

app.get("/test", (req,res) => {
  Axios.get('http://localhost:3000/api/hello').then((result)=>{
     let {url} = result
     if(url){
        res.redirect(url)
     }
  })
});

Edit2

Я никогда не использовал режим предварительного просмотра, но из того, что я понял, режим предварительного просмотра просто утилита для переопределения генерации sati c и выборки данных с вашего cms во время запроса вместо времени сборки, а не прокси-сервера. Изображение, с которым вы создаете новое сообщение в своей безголовой cms, вы хотите предварительно просмотреть свое новое сообщение в блоге, но затем эти данные будут отображаться только во время сборки, в режиме предварительного просмотра вы можете переопределить это и получить предварительный просмотр своего сообщения, чтобы страница была Оформляется по запросу в срок. Вы можете увидеть предварительный просмотр URL-адреса предварительного просмотра или встроить URL-адрес в iframe (я думаю). Обратите внимание, что это имеет смысл только в том случае, если вы предварительно визуализируете свою страницу с getStaticProps. С getServerSideProps вам не нужен предварительный просмотр (вы уже будете получать данные по каждому запросу), но ваши посетители будут получать контент каждый раз и в этом нет необходимости, поэтому вы можете использовать getStaticProps вместе с предварительным просмотром api только для просмотра вашего сообщения. черновик перед публикацией. Так что я думаю, что сценарий отличается от вашего исходного вопроса.

...