Gatsby.js - прокси для экспресс-сервера - PullRequest
0 голосов
/ 08 апреля 2019

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

fetch('http://localhost:3000/tasks')

Но когда я настраиваю прокси в gatsby.config.js следующим образом:

proxy: {
    prefix: '/',
    url: 'http://localhost:3000'
  },

и вызываю:

fetch('/tasks)

Я получаю эту ошибку:

Необработанный отказ (SyntaxError): неожиданный токен <в JSON в позиции 0 </p>

Какправильно настроить прокси в gatsby.js ??

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Это должно войти в комментарий, но формат не очень хороший, поэтому я пишу как ответ. Я не уверен, какова точная причина, но какая-то идея, чтобы помочь вам отладить.

  1. Скорее всего, вы получили ответ в формате HTML с заголовком типа содержимого, который говорит, что это JSON. Проверьте, так ли это, проверив сетевую панель в браузере devtools.
  2. Убедитесь, что запрос действительно попал на ваш экспресс-сервер. Если 1. верно, то весьма вероятно, что он не достиг экспресс-сервера, HTML-код поступает с сервера разработчиков Гэтсби.
  3. Если оба приведенных выше пункта верны, то, возможно, отладьте исходный код Gatsby, чтобы выяснить, почему он решил обработать запрос, а не пересылать его. Дерек Нгуен указал на местоположение . Это также экспресс-сервер, поэтому с вами все будет в порядке.
1 голос
/ 09 апреля 2019

Не думаю, что вы можете использовать root в качестве прокси. В gatsby development прокси обрабатывается как this :

app.use(`${prefix}/*`, (req, res) => { ... }

Таким образом, если prefix установлено на /, оно станет //*, что не будет работать. Даже если бы он работал как /*, все маршруты с сервера gatsby будут перенаправлены на прокси-сервер, поскольку прокси-сервер имеет более высокий прецедент, чем остальные маршруты, у gatsby вообще не было бы возможности обслуживать какие-либо страницы.

prefix должно быть словом, начинающимся с косой черты, т.е. /api:

proxy: {
  prefix: '/api',
  url: 'http://localhost:3000'
},

Тогда вы можете использовать его:

fetch(`/api/tasks`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...