Вот некоторый контекст. У меня есть сайт ReactJS, созданный с помощью Gatsby. Этот сайт полностью статичен и не имеет бэкэнда. Недавно я работал над интеграцией с бэкэндом, так как я хотел сделать некоторые вещи с помощью API GitHub. В любом случае, я работал над созданием своего собственного API-интерфейса с помощью NodeJS, а затем передавал запросы внешнего интерфейса (используя API выборки).
Во время разработки внешний интерфейс находится на локальном хосте: 8000, а внутренний на локальном хосте: 5000. Это мой gatsby-config.js
файл. У него есть некоторые другие биты, не связанные с этим вопросом, но бит прокси находится внизу:
module.exports = {
siteMetadata: {
title: "Reece Mercer",
description: "Personal website"
},
plugins: [
'gatsby-plugin-react-helmet',
{
resolve: `gatsby-plugin-manifest`,
options: {
name: 'gatsby-starter-default',
short_name: 'Reece Mercer',
start_url: '/',
background_color: '#663399',
theme_color: '#663399',
display: 'minimal-ui',
icon: 'src/assets/images/website-icon.png', // This path is relative to the root of the site.
},
},
'gatsby-plugin-sass',
'gatsby-plugin-offline',
'gatsby-plugin-favicon',
{
resolve: 'gatsby-source-filesystem',
options: {
path: `${__dirname}/src/blog_posts`,
name: 'blog_posts'
}
},
'gatsby-transformer-remark'
],
proxy: {
prefix: "/myRepoAPI",
url: "http://localhost:5000",
},
}
По сути, любые запросы, сделанные от внешнего интерфейса на /myRepoAPI/anything
, должны передаваться от внешнего интерфейса к внутреннему. Я использовал Postman для проверки бэкэнда, и эта конечная точка работает как надо.
Вот вызов извлечения, который я использовал в компоненте React внешнего интерфейса:
componentDidMount(){
fetch('/myRepoAPI/hello')
.then(res => console.log(res))
}
Теперь анализируем этот консольный журнал:
Response {type: "basic", url: "http://localhost:8000/myRepoAPI/hello", redirected: false, status: 200, ok: true, …}
body: (...)
bodyUsed: false
headers: Headers {}
ok: true
redirected: false
status: 200
statusText: "OK"
type: "basic"
url: "http://localhost:8000/myRepoAPI/hello"
__proto__: Response
Значение url
на локальном хосте: 8000 , а не 5000 . Прокси не работал. Я пробовал разные комбинации маршрутов, трейлинг /
и даже пробовал расширенный прокси-метод developMiddleware
. Кажется, ничто не заставляет его работать так, как должно.
Любая помощь будет принята с благодарностью!