javascript - 如何使用 express 作为直通代理?

标签 javascript node.js express https proxy

如何创建充当代理的快速服务器?

要求:

  • http + https
  • 在公司代理背后工作
  • 为某些 url 返回特殊内容的选项

我尝试了 http-proxy、express-http-proxy、https-proxy-agent、request。我不知道如何正确使用它们。

使用请求

我用 request 得到的最好结果。但也存在一些问题。

var express = require('express'),
    request = require('request'),
    app = express();

var r = request.defaults({'proxy':'http://mycorporateproxy.com:8080'});
function apiProxy() {
    return function (req, res, next) {
        console.log(req.method);
        r.get(req.url).pipe(res);    
    }
}

app.use(apiProxy());

app.listen(8080, function () {
    'use strict';
    console.log('Listening...');
});

这种方法的问题:

  • 它对所有请求(HEAD、GET、...)使用get
  • 未传递源请求的 header
  • https 不工作

使用 http-proxy

var express = require('express'),
    httpProxy = require('http-proxy'),
    app = express();

var proxy = httpProxy.createProxyServer({
});

function apiProxy() {
    return function (req, res, next) {
        console.log(req.method);
        proxy.web(req, res, {target: req.url});
    }
}

app.use(apiProxy());

app.listen(8080, function () {
    'use strict';
    console.log('Listening...');
});

我得到了(可能是因为缺少公司代理)

Error: connect ECONNREFUSED xx.xx.xx.xx:80
    at Object.exports._errnoException (util.js:1026:11)
    at exports._exceptionWithHostPort (util.js:1049:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1085:14)

我用这个选项启动了 google chrome

--proxy-server="localhost:8080"

我的 .npmrc 也包含代理。

proxy=http://mycorporateproxy.com:8080
https-proxy=http://mycorporateproxy.com:8080

最佳答案

我已经成功地将 http-proxy-middleware 与以下内容一起使用:

const express = require("express")
const app = require("express")()
const proxy = require("http-proxy-middleware")
const package = require("./package.json")

const target = process.env.TARGET_URL
const port = process.env.PORT

const wildcardProxy = proxy({ target })

app.use(wildcardProxy)

app.listen(config.port, () => console.log(`Application ${package.name} (v${package.version}) started on ${config.port}`))

我还不需要 https,但文档中提到了它:https://github.com/chimurai/http-proxy-middleware#http-proxy-options

关于javascript - 如何使用 express 作为直通代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41937011/

相关文章:

javascript - 带有附加参数的 FQL 的 Facebook JavaScript SDK

node.js - Nodejs中的passport-jwt总是返回未经授权的

node.js - JWT (NodeJS) 的 512 位 key (公私钥对)是否足够安全

node.js - 带有 SSL 的 NodeJS Express 不适用于 Nginx 反向代理

javascript - Passport local 使用 Angular 返回错误 400 错误请求

javascript - 在 jQuery 中从 DOM 中提取多个数据?

javascript - 如何以方程的形式产生两个值的输出而不仅仅是输出?

Node.JS Redis 连接 Microsoft Azure Web App 中的 EADDRNOTAVAIL 错误

javascript - 通过表单输入+Express.js向mongodb插入数据

javascript - 更改 Vue.js 属性,使事件仅触发一次