标签: http-proxy-middleware

如何为 Next.js API 请求进行 HTTP 代理

我在网上尝试了很多方法,但到目前为止没有任何效果。

第一次尝试 (src/pages/api/proxy/[...slug].js):

import { createProxyMiddleware } from 'http-proxy-middleware';

// Create proxy instance outside of request handler function to avoid unnecessary re-creation
const apiProxy = createProxyMiddleware({
    target: 'http://localhost:5000',
    changeOrigin: true,
    pathRewrite: { [`^/api/proxy`]: '' },
    secure: false,
});

export default function (req, res) {
    apiProxy(req, res, (result) => {
        if (result instanceof Error) {
            throw result;
        }

        throw new Error(`Request '${req.url}' is not proxied! We should never reach here!`);
    });
};
Run Code Online (Sandbox Code Playgroud)

给我这样的错误:

TypeError: Object(...) is not a function …
Run Code Online (Sandbox Code Playgroud)

http-proxy node.js express http-proxy-middleware next.js

17
推荐指数
2
解决办法
3万
查看次数

使用具有多路径代理匹配的 angular-cli

如何在我的 proxy.conf.json 中定义多个代理路径?github 上的angular-cli 代理文档看起来只能有一个路径 (/api):

{
  "/api": {
    "target": "http://localhost:3000",
    "secure": false
  }
}
Run Code Online (Sandbox Code Playgroud)

但是当我查看webpack 代理http-proxy-middleware文档时,我发现应该可以定义多个路径(/api-v1 和 /api-v2):

// Multiple entry
proxy: [
  {
    context: ['/api-v1/**', '/api-v2/**'],
    target: 'https://other-server.example.com',
    secure: false
  }
]
Run Code Online (Sandbox Code Playgroud)

但我不明白如何将其放入 proxy.conf.json。

webpack-dev-server angular-cli http-proxy-middleware angular

13
推荐指数
1
解决办法
1万
查看次数

使用 http-proxy-middleware 记录请求/响应主体

我正在使用http-proxy-middleware来实现透明代理。

我想做请求/响应检查。我的意思是,我想打印通过代理的文本文件请求/响应,而不对其进行任何修改。

到目前为止,我使用的是这样的(简化版):

app.use('/proxy/:service/', proxy({
        pathRewrite: function(path, req){
            ...
        },
        router: function(req) {
            ...
        },
        onProxyRes: function(proxyRes, req, res) {
            log("Req URL: " + req.originalUrl);
            log("Response status code: " + proxyRes.statusCode);
        }
}));
Run Code Online (Sandbox Code Playgroud)

log()是一个帮助函数,它使用字符串作为输入并打印它是我的日志文件)

因此,基本上我正在使用onProxyRes拦截响应并在那时进行日志记录。问题是我只能使它适用于 URL、状态代码、标题等,但我没有在req和/或resProxy对象中找到有效负载正文。

我已阅读有关如何在此处获取res尸体的信息。然而,这似乎是一个复杂的解决方案(需要设置一个data事件处理程序)。req据我所知,它没有覆盖身体。

任何提示/帮助/参考都非常感谢,请。不确定使用onProxyRes是否是实现这一点的最佳方式,也许库提供了一些功能来涵盖请求/响应情况。

node.js http-proxy-middleware

11
推荐指数
1
解决办法
3117
查看次数

如何启用和查看create-react-app代理日志?

如何查看由所使用的代理处理的所有请求和响应的详细日志create-react-app

我不仅要记录一些端点。相反,我想看到的一切,尽可能详细越好,这是怎么回事通过代理。

原因是我从AWS API Gateway服务器收到了403错误,但无法通过浏览器,curl等重现该问题。因此,我想了解通过网络传输的实际标头和内容,看看我的问题是否可能与代理相关。

node-http-proxy aws-api-gateway create-react-app http-proxy-middleware aws-amplify

7
推荐指数
1
解决办法
299
查看次数

除了 GET 之外的代理请求都挂在 NestJS 和 http-proxy-middleware 上

示例代码可在https://github.com/baumgarb/reverse-proxy-demo 上获得README.md 解释了如何在克隆存储库时重现问题。

我有一个 API 网关和一个返回 todos (TodosAPI) 的下游服务。客户端通过 API 网关访问下游服务。

API 网关正在利用该http-proxy-middleware包来代理请求。有两种实现,第 2 种不起作用:

1. 全局中间件,main.ts其中在路径 /api/v1/...

这种方法工作得非常好,无论使用什么 http 方法(GET、PUT 等),它都会代理对下游服务的所有请求。

import * as proxy from 'http-proxy-middleware';

app.use(
  '/api/v1/todos-api',
  proxy({
    target: 'http://localhost:8090/api',
    pathRewrite: {
      '/api/v1/todos-api': ''
    },
    secure: false,
    onProxyReq: (proxyReq, req, res) => {
      console.log(
        `[Global Functional Middlware]: Proxying ${req.method} request originally made to '${req.originalUrl}'...`
      );
    }
  })
);
Run Code Online (Sandbox Code Playgroud)

2. 在应用模块中注册的 NestMiddleware 启动路径 /api/v2/...

这种方法适用于 GET 请求,但其他 http 方法(如 PUT)一直“挂起”,客户端从未收到任何响应。问题似乎是下游服务中的控制器从未被调用。

import * …
Run Code Online (Sandbox Code Playgroud)

middleware http-proxy-middleware nestjs

7
推荐指数
2
解决办法
4223
查看次数

您如何配置 Webpack 开发服务器以在通过不同的服务器运行站点的其余部分时为特定文件夹提供服务?

一些快速背景:

我公司的站点运行 CMS,由 CMS 处理所有路由。没有 html 文件,只有 razor 文件 (.cshtml)。虽然从头开始重做网站是我更喜欢做的,但这不是一种选择,所以我试图通过逐页将 vue.js 与 webpack 开发工作流逐页集成来慢慢地使网站现代化基础。

我花了大量时间设置 webpack,使其只能处理 /dist/ 文件夹中的文件 - 其他所有内容都通过http://my.server/ 提供服务,并由 CMS 和后端处理。

通过反复试验,我设法在 /dist/ 文件夹中获取 webpack-dev-server 服务文件,同时允许服务器的其余部分提供其他所有内容(通过http://my.server/)。不幸的是,这仅在 webpack-dev-server 部分的文件路径特别引用“ http://localhost:8080/ ”时才有效,这显然是不可接受的。

开发环境代码必须与生产环境代码完全一样,因此<script src="http://localhost:8080/dist/build.js"></script>是不可接受的。

但是,如果我只是编写<script src="/dist/build.js"></script>服务器将<script src="http://my.server/dist/build.js"></script>其解析为显然不正确并导致 404(因为这些文件仅从开发服务器提供)。

我的问题是,“如何配置 webpack-dev-server 以从自身提供 /dist/ 文件夹中的所有内容,同时允许通过“ http://my.server ”提供站点上的所有其他内容?

这是我的 webpack.config.js 文件以供参考:

var path = require('path')
var webpack = require('webpack')

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/dist/',
    filename: 'build.js' …
Run Code Online (Sandbox Code Playgroud)

javascript webpack vue.js webpack-dev-server http-proxy-middleware

6
推荐指数
1
解决办法
1万
查看次数

通过添加从另一个请求返回的身份验证令牌来修改 http 代理请求

我正在使用 http-proxy-middleware ( https://github.com/chimurai/http-proxy-middleware#http-proxy-eventsmy-proxy/ ) 来实现到另一个 REST API (调用它) 的简单代理 (调用它/rest-api)这要求用户在 HTTP 标头中传递身份验证令牌auth-tokenPOST /rest-api/auth可以使用正文中的凭据从端点获取令牌。

我希望我的代理接受传入请求并检查是否auth-token在请求标头中设置,如果没有,则在将请求传递到 之前执行POST /rest-api/auth检索令牌并在标头中设置。auth-tokenrest-api/

在我指定的代理配置中

onProxyReq: function (proxyReq, req, res) {
        if (!req.header("auth-token")) {
            const authRequest = request({
                    url: 'rest-api/auth',
                    method: 'POST',
                    json: {"username": "user", "password": "pass"}
                },
                function (error, resp, body) {
                    proxyReq.setHeader("auth-token", body.token)
                }
            );
        }
    }
Run Code Online (Sandbox Code Playgroud)

我可以看到body.token返回正确的令牌。但是,setHeader调用失败并显示Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to …

proxy request auth-token node.js http-proxy-middleware

6
推荐指数
1
解决办法
9139
查看次数

如何为生产中的网站设置代理设置

我已经开发了一个有角度的网站,并在proxy.conf.js文件中有以下代理设置.

const proxyConfig = [
  {
    context: '/web/api/webclients/**',
    target: 'https://10.109.102.109',
    changeOrigin: true,
    secure: false
  },
  {
    context: '/restful/**',
    target: 'https://10.109.110.190',
    changeOrigin: true,
    secure: false
  },
  {
    context: '/api/**',
    target: 'http://10.109.105.107',
    changeOrigin: true,
    secure: false
  }
];
Run Code Online (Sandbox Code Playgroud)

在开发模式下,proxy.conf.js按预期工作.

我在package.json文件中有这些用于启动和构建.

"build": "ng build --aot --prod",
"start": "ng serve --proxy-config proxy.conf.js -o",
Run Code Online (Sandbox Code Playgroud)

运行"npm run build"并使用生成的文件在IIS 8上托管网站后,需要使用代理设置的页面不起作用.

例如,我的请求https:// localhost/web/api/webclients/authentication应该转到https://10.109.102.109/web/api/webclients/authentication

如果我在Windows服务器上托管此网站,如何在IIS中设置这些代理设置?如果我在非Windows服务器上托管它,如何设置这些代理设置?

proxy http-proxy-middleware angular

5
推荐指数
1
解决办法
1257
查看次数

http-proxy-middleware 是否可以与 Serverless Lambda 配合使用?

我正在尝试通过无服务器 Lambda 代理外部 API。尝试以下代码示例:http://localhost:3000/users/1返回 200 但正文为空。我必须忽略一些东西,因为http://localhost:3000/users/11返回 404 (如预期)。

索引.js

'use strict';
const serverless = require('serverless-http');
const express = require('express');
const {
  createProxyMiddleware
} = require('http-proxy-middleware');

const app = express();

const jsonPlaceholderProxy = createProxyMiddleware({
  target: 'http://jsonplaceholder.typicode.com',
  changeOrigin: true,
  logLevel: 'debug'
});

app.use('/users', jsonPlaceholderProxy);

app.get('/', (req, res) => {
  res.json({
    msg: 'Hello from Serverless!'
  })
})

const handler = serverless(app);
module.exports.handler = async (event, context) => {
  try {
    const result = await handler(event, context);
    return result;
  } …
Run Code Online (Sandbox Code Playgroud)

proxy http aws-lambda http-proxy-middleware serverless

5
推荐指数
1
解决办法
1276
查看次数

设置具有多个目标的代理服务器?

我有 2 个快递服务器:

  1. 接口1
  2. API2

两者都可以使用以下方式在本地访问:

http://localhost:3000/news

http://localhost:3001/stock

我的目标:

从代理服务器访问两个 Express 服务器端点http://localhost:8008

我的问题:

我只能到达第一个api1的端点

任何帮助将不胜感激 :)

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const api1 = createProxyMiddleware({
  target: 'http://localhost:3000'
});


const api2 = createProxyMiddleware({
    target: 'http://localhost:3001'
  });

const app = express();

app.use(api1);
app.use(api2);

app.listen(8008);
Run Code Online (Sandbox Code Playgroud)

**编辑1:

我尝试了一下,它适用于api1端点,但不适用于api2端点。

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const apiProxy = createProxyMiddleware('/', {
  target: 'http://localhost:3000'
});
const apiProxytwo = createProxyMiddleware('/', {
  target: …
Run Code Online (Sandbox Code Playgroud)

http-proxy express http-proxy-middleware

5
推荐指数
1
解决办法
8219
查看次数