1

我使用 webpack-dev-server 作为原始 API URL 的代理,以避免与CORS相关的问题,并根据环境动态指向 Dev、UAT、Mock 服务器 URL。

对于 Mock dev - 我更喜欢使用本地文件系统中的 JSON,它为所有 GET 请求提供服务

如何添加对“POST、PUT、DELETE”的支持,以便可以直接提供本地 JSON?

一种可能的方法可能是 - 将 HTTP 请求方法覆盖为 GET,因为我没有传递任何有效负载。但我找不到任何配置。

以下是当前配置:

if (IS_MOCK_SERVER) {
    devServer.proxy = {
        '/api': {
            target: 'http://localhost:9090/data',
            secure: false,
            pathRewrite: function(req, options) {
                return req + '.json'
            }
        }
    }
} else {
    devServer.proxy = {
        '/api': {
            target: 'http://dev-server-url.com',
            secure: false
        }
    }
}

我尝试深入研究官方文档,但在这个话题上没有得到太多支持。

Webpack 开发服务器使用http-proxy-middleware来选择性地将请求代理到一个单独的、可能是外部的后端服务器。

4

2 回答 2

0

由于 Webpack 开发服务器内部使用 http-proxy-middleware 来选择性地将请求代理到其他服务器。

所以,我在以下位置开了一张票:https ://github.com/chimurai/http-proxy-middleware/issues/151

将来会寻找更好的解决方案。

但是暂时,我通过在 API Util 本身中覆盖 HTTP 方法,然后将其传递给 Webpack-dev-server,找到了解决需求/问题的方法。

// Convert all the Request Method to Get ***ONLY IF*** MOCK-Server is running
if (process.env.IS_MOCK_SERVER) {
    payload.method = 'get';
}
于 2017-03-29T08:14:22.197 回答
0

经过大量修补后,我找到了这个设置,我用它来使用 http 代理中间件中的 onProxyReq 事件将所有请求转换为“GET”。我在 Angular cli 代理设置的上下文中使用它,但对于任何 webpack 开发服务器实例都一样

onProxyReq: function(proxyReq, req, res) {
    // convert all api requests (POST/PUT/DELETE) to GET so they work in webpack dev server for mocking
    proxyReq.method =  'GET';
}

https://github.com/nodejitsu/node-http-proxy#listening-for-proxy-events

于 2018-03-01T15:24:38.243 回答