GatsbyJS/ReactJS 没有正确代理请求

Posted

技术标签:

【中文标题】GatsbyJS/ReactJS 没有正确代理请求【英文标题】:GatsbyJS/ReactJS not proxying requests correctly 【发布时间】:2019-08-29 01:44:02 【问题描述】:

这里有一些上下文。我有一个用 Gatsby 构建的 ReactJS 站点。该站点完全是静态的,没有后端。我最近一直在研究后端集成,因为我想用 GitHub API 做一些数据可视化的东西。无论如何,我正在使用 NodeJS 构建自己的后端 API,然后代理前端请求(使用 fetch API)。

在开发过程中,前端位于 localhost:8000,后端位于 localhost: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 组件中使用的 fetch 调用:

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 值位于 localhost:8000,而不是 5000。代理没有工作。我尝试了不同的路由组合,尾随/,甚至尝试了developMiddleware 的高级代理方法。似乎没有什么可以让它正常工作。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

由于 Gatsby 的内部开发服务器(默认在端口 8000)处理代理,因此在响应对象中,url 值将始终为 http://localhost:8000/...,无论代理是否正常工作。

从本地服务器的 5000 端口查看日志时,您可能会有更多线索,看看来自 Gatsby 的请求是否真的达到了那个目的;或注销您从请求中获得的实际数据。

【讨论】:

我没想过这样测试它。对这些东西还是很陌生。谢谢!结果我需要做res => res.json().then(res => console.log(res)) 才能记录实际的身体。因为我没有在原始日志中看到我的硬编码响应,所以我认为出了点问题,但我只是没有正确记录它。 哦,原来如此,很高兴你把它整理好了!

以上是关于GatsbyJS/ReactJS 没有正确代理请求的主要内容,如果未能解决你的问题,请参考以下文章

使用代理请求不起作用

如何使用 luminati.io 等代理服务器正确地向 https 发出请求?

如何在 C# 中创建一个简单的代理?

element-admin mock改成真实请求 vue-cli3 配置代理

如何在 Python 请求上轮换代理

HTTP的错误响应码