Nodejs http-proxy代理实战应用

var https = require('https');
var express = require('express');
var app = express()
var http = require('http'),
    httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({ changeOrigin: true});  

app.all('/apis/*', function (req, res, next) {
    var target = req.originalUrl.replace("/apis/", "");
    // Change this API url to suit your project
    var url = `/${target}`;
    req.url = url;
    console.log(url);
    delete req.headers.host;
    proxy.web(req, res, { target: 'http://localhost', changeOrigin: true });  
})


var server = app.listen(8080, function () {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at http://%s:%s', host, port);
});

  changeOrigin: true   和  req.url = '处理后的url'

var https = require('https');var express = require('express');var app = express()var http = require('http'),    httpProxy = require('http-proxy');var proxy = httpProxy.createProxyServer({ changeOrigin: true});  
app.all('/apis/*', function (req, res, next) {    var target = req.originalUrl.replace("/apis/", "");    // Change this API url to suit your project    var url = `/${target}`;    req.url = url;    console.log(url);    delete req.headers.host;    proxy.web(req, res, { target: 'http://localhost', changeOrigin: true });  })

var server = app.listen(8080, function () {    var host = server.address().address;    var port = server.address().port;    console.log('Example app listening at http://%s:%s', host, port);});


更多专业前端知识,请上 【猿2048】www.mk2048.com
### 关于 Node.js 中 `http-proxy-middleware` 转发后无响应的问题 在使用 `http-proxy-middleware` 进行请求转发时,如果遇到无响应的情况,可能是由于以下几个原因引起的: #### 1. **目标服务器未正确返回数据** 如果目标服务器未能正常接收并处理请求,则可能导致客户端无法接收到任何响应。这种情况通常发生在目标服务器配置不正确或者网络连接存在问题的情况下[^1]。 #### 2. **路径匹配问题** 当设置代理规则时,如果没有正确指定路径匹配模式,可能会导致某些请求被忽略或错误路由到其他地方。例如,在 Express 应用程序中定义的路径可能与实际发送过来的 URL 不一致[^3]。 #### 3. **事件监听器缺失** 在创建代理实例之后,需要确保已经绑定了必要的事件处理器来捕获潜在错误以及日志记录等功能。比如通过绑定 'error' 和 'proxyRes' 等事件可以更好地调试和监控整个过程[^4]。 以下是经过调整后的代码示例,解决了上述提到的一些常见问题: ```javascript const express = require('express'); const { createProxyMiddleware } = require('http-proxy-middleware'); // 初始化Express应用 const app = express(); app.use('/api', createProxyMiddleware({ target: 'https://example.com', changeOrigin: true, pathRewrite: {'^/api': ''}, // 可选:重写API前缀 onProxyReq(proxyReq, req, res){ console.log(`Request to ${req.method} ${req.url}`); }, onError(err, req, res){ console.error("Error during proxy:", err.message); res.status(500).send({ error: "Internal Server Error"}); } })); // 启动服务 app.listen(3000, () => { console.log('Server is running at port 3000...'); }); ``` 此代码片段实现了以下功能: - 将 `/api/*` 的所有请求都转发至 https://example.com[^2]。 - 设置了 `changeOrigin=true` 参数以便让目标站点认为该请求来自其自身域名下。 - 添加了一个简单的日志打印函数用于查看每次请求详情。 - 定义了错误处理逻辑以防万一发生异常情况能够及时通知用户。 ### 总结 当面对 `http-proxy-middleware` 请求转发后无响应这一现象时,应仔细检查以上几个方面是否存在隐患,并采取相应措施加以改进。同时也可以借助官方文档获取更多高级选项的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值