为啥代理在与 webpack 一起使用时不起作用

Posted

技术标签:

【中文标题】为啥代理在与 webpack 一起使用时不起作用【英文标题】:why proxy not working when used with webpack为什么代理在与 webpack 一起使用时不起作用 【发布时间】:2019-05-19 23:42:43 【问题描述】:

我有一个在 3300 上监听的 node.js 服务器。用 postman 测试它没问题。 我有一个使用 create-react-app 监听 3000 和 package.json 创建的反应应用程序,其中声明“代理”:“http://localhost:3300”。这也测试好了。

我在同一台机器上有另一个 react 应用程序,它使用 webpack 并在 8080 上监听。package.json 也有相同的代理语句 "proxy":"http://localhost:3300" 。在这种情况下,当我调用 api /api/users 时,我的控制台日志显示

api-auth.js:5 POST http://localhost:8080/auth/signin/ 404 (Not Found)

如果我直接将 api 称为 获取('http://localhost:3300/api/users')

它因 CORS 错误而失败。

为了更清楚一点,这个失败的反应应用程序实际上是从http://mdbootstrap.com 下载的,我在其中添加了一个登录表单来测试它是否有效。

您能帮我解决这个问题吗?

根据我的理解,只需在 package.json 中添加代理行就可以了,但不知何故,当使用 webpack 时它不起作用......我在 webpack 中也应该做些什么吗?

【问题讨论】:

我认为问题在于您在api-auth.js 或您已实现它的任何其他地方的获取功能。你也可以发送你的fetch函数吗 【参考方案1】:

你不需要代理,你可以安装 npm 包“cors”。 https://www.npmjs.com/package/cors 并在你的 node.js 服务器上使用它。这是我在 express.js 服务器上使用它的方式。

const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors());

【讨论】:

正如我上面解释的,我在 node.js 中有一个服务器,它已经配置了 CORS(作为 SERVER)并且它可以工作。问题陈述是使用 webpack 配置的 react 应用程序没有使用我在 react 应用程序(客户端)中的代理设置。【参考方案2】:

除非我弄错了,package.json 中的 proxy 不会被 webpackwebpack-dev-middlewarewebpack-dev-server 读取。它将解释您收到的404 响应。

您应该尝试配置 devServer.proxy 。如果您愿意,您甚至可以导入 package.json 以获取服务器 URL。

这是一个简单的示例,其中 Web 服务器将请求代理到侦听 localhost:3000 的 API 服务器。

【讨论】:

对不起,我尝试了链接上提供的所有 3 个选项。它仍然是 8080 而不是 3300。 @Avinash 我添加了一个简单的示例,您可以从该示例开始。 API 服务器使用来自micro 的默认端口3000 你好,我很抱歉,但我尝试了几种方法并进行了很多研究......实际上它应该按原样工作,但不知何故,它不起作用。我没有更改任何内容,只是复制了代码并尝试使其在 webpack 解决方案中工作。反应文档说接受标头不应该是 text/html 才能工作。我正在使用 application/json 但仍然无法正常工作。所以我会保持这个帖子,直到我可以,否则我将不得不关闭这个帖子。抱歉,您已尽力提供帮助。 @Avinash 不用担心!我可以推荐的最后一件事是尝试深入研究 devServer.proxy 配置并尝试创建一个代理配置来记录传入的请求和响应。它应该可以帮助您调试问题出在哪里......它可能是某个地方的一些小细节。 这是一个绝妙的主意。我想知道如何记录通讯。

以上是关于为啥代理在与 webpack 一起使用时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥onclick处理程序在javascript中与innerHTML一起使用时不起作用[重复]

为啥在与数组中的字段匹配时,mongoDB聚合中的查找中的管道不起作用?

为啥我的函数在调用时不起作用? [关闭]

Webpack 开发服务器代理路由器选项不起作用

虚拟机的 WebPack 和 Vue.js 代理不起作用

为啥不和谐机器人适用于默认表情符号,而当我放置自定义表情符号时不起作用?