我在网上尝试了很多方法,但到目前为止没有任何效果。
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) 如何在我的 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
我正在使用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是否是实现这一点的最佳方式,也许库提供了一些功能来涵盖请求/响应情况。
如何查看由所使用的代理处理的所有请求和响应的详细日志create-react-app?
我不仅要记录一些端点。相反,我想看到的一切,尽可能详细越好,这是怎么回事通过代理。
原因是我从AWS API Gateway服务器收到了403错误,但无法通过浏览器,curl等重现该问题。因此,我想了解通过网络传输的实际标头和内容,看看我的问题是否可能与代理相关。
node-http-proxy aws-api-gateway create-react-app http-proxy-middleware aws-amplify
示例代码可在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) 一些快速背景:
我公司的站点运行 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
我正在使用 http-proxy-middleware ( https://github.com/chimurai/http-proxy-middleware#http-proxy-eventsmy-proxy/ ) 来实现到另一个 REST API (调用它) 的简单代理 (调用它/rest-api)这要求用户在 HTTP 标头中传递身份验证令牌auth-token。POST /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.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服务器上托管它,如何设置这些代理设置?
我正在尝试通过无服务器 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) 我有 2 个快递服务器:
两者都可以使用以下方式在本地访问:
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) node.js ×3
proxy ×3
angular ×2
express ×2
http-proxy ×2
angular-cli ×1
auth-token ×1
aws-amplify ×1
aws-lambda ×1
http ×1
javascript ×1
middleware ×1
nestjs ×1
next.js ×1
request ×1
serverless ×1
vue.js ×1
webpack ×1