javascript - 如何在 Express 中代理外部站点

标签 javascript node.js express proxy reverse-proxy

我正在尝试制作一个代理服务器来加载我域下的外部网站。我的目标是让人们访问 myDomain.com/anyDomain.com 并能够使用具有附加功能(注入(inject) JS)的 anyDomain.com。

我尝试使用 Request 包来获取网站的 html,然后将其发送到 Express 中的响应,但这种方法弄乱了网站(相对路径、缺少 CSS、错误的 JS 请求等)。

是否有任何 Node 包可以完成此任务?如果没有,我自己怎么办?

谢谢!

最佳答案

这应该让你开始,它允许你调用 fx http://localhost:6008/www.example.com/hello/world?foo=bar 然后代理 http://www.example.com/hello/world?foo=bar 但如果你要代理其他网页,你会遇到各种各样的问题。

首先,它可能不合法。我不知道有关代理页面和更改它们的规则,您应该查看有关您的特定用例的法律。

其次,由于网页上的很多内容都使用绝对 url(特别是如果内容使用多个域用于 CDN 和 API 之类的东西),这些资源仍然会指向原始目标,这很可能会导致相当头疼

var express = require('express'),
    http = require('http'),
    url = require('url'),
    app = express();

app.get('/:host*', function (request, response, next) {

    var proxyurl = url.parse(request.url);
    var path = request.params[0];
    if (!!proxyurl.search) {
        path += proxyurl.search;
    }

    http.get({
        host: request.params.host,
        path: path,
        headers: {}
    }, function(res) {
        var body = '';

        res.on('data', function(chunk) {
            body += chunk;
        });

        res.on('end', function() {
            response.end(body);
        });
    }).on('error', function(e) {
        console.log("Got error: ", e);
    });
});

app.listen(6008);

关于javascript - 如何在 Express 中代理外部站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30717003/

相关文章:

javascript - 在手动编辑 window.location 期间忽略 onHashChange

node.js - 了解 NPM 收缩包装

javascript - 使用浏览器从服务器拉取消息来更新消息

javascript - 尝试使用nodejsexpress打开网页时出错

mysql - 无法从 AJAX POST 成功函数 Express/mySQL 获取数据

javascript - 查找单词中的特定字母

javascript - 导入文件夹时不导入 "index.js"吗?

javascript - 需要互斥复选框或可取消选择的单选按钮

Node.js readUIntBE 任意大小限制?

javascript - 如何在通过 Passport 登录后检查当前正在使用哪个用户。 js