gpt4 book ai didi

javascript - 如何编写服务于大多数本地文件但将某些文件重新路由到另一个域的 Node 快速应用程序?

转载 作者:行者123 更新时间:2023-11-30 08:03:46 26 4
gpt4 key购买 nike

我正在开发一个通常使用相对复杂的过程构建然后部署到 WebLogic 的小型 Web 应用程序。

但是,我正在处理的部分是使用 AngularJS,并且全部是 HTML 和 Javascript。它通常对同一域中的另一个 webapp 进行 ajax 调用。为了缩短我的开发周期,我想避免构建过程,而只是重新加载浏览器页面。

我想我可以用“node express”做到这一点,但细节让我难以理解。我已经设法定义了一个非常简单的应用程序,它只提供本地文件,但现在我必须弄清楚如何检测其中一些路径是否匹配表达式,并将这些请求重新路由到对外部域的请求。

因此,如果它收到对“/diag/stuff.html”、“/foo/thing.html”或“/index.html”的请求,它将发回匹配相同路径的文件。但是,如果路径匹配“/fooService/.*”,那么我必须将 GET 的响应发送回同一路径,但在不同的主机和端口上。

到目前为止,这是我的普通应用程序:

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

app.use("/", express.static(__dirname));

app.listen(8000);

更新:

我喜欢代理的想法,所以我在本地安装了“http-proxy”(我忘记了,先是全局安装)然后将脚本更改为:

var express = require('express');
var app = express();
var httpProxy = require('http-proxy');
var proxy = new httpProxy.RoutingProxy();

app.use("/", express.static(__dirname));

app.get('/FooService/*', function(req, res) {
"use strict";
return proxy.proxyRequest(req, res, {
host: "foohost.net",
port: 80
});
});

app.listen(8000);

这失败了:

<path>\server.js:4
var proxy = new httpProxy.RoutingProxy();
^
TypeError: undefined is not a function
at Object.<anonymous> (<path>\server.js:4:13)

这里可能出了什么问题?

更新:

在“require”之后查看“console.log(httpProxy)”的内容是否有用?:

function ProxyServer(options) {
EE3.call(this);

this.web = this.proxyRequest = createRightProxy('web')(options);
this.ws = this.proxyWebsocketRequest = createRightProxy('ws')(options);
this.options = options;

this.webPasses = Object.keys(web).map(function(pass) {
return web[pass];
});

this.wsPasses = Object.keys(ws).map(function(pass) {
return ws[pass];
});

this.on('error', this.onError.bind(this));

}

这是否提供了为什么“new httpProxy.RoutingProxy()”说它未定义的线索?

最佳答案

您可以使用http-proxy 将请求转发到不同的主机。要安装 http-proxy,您需要运行 sudo npm install http-proxy。处理代理的代码如下所示:

httpProxy = require('http-proxy');
proxy = new httpProxy.RoutingProxy();
(...)
app.get('/fooService/*', function (request, response) {
"use strict";
return proxy.proxyRequest(request, response, {
host : externalHost,
port : 80
});
});

更新

以上代码适用于 http-proxy ~0.10.x。从那时起,图书馆发生了很多变化。您可以在下面找到新版本的示例(在撰写本文时 ~1.0.2):

var httpProxy = require('http-proxy'),
proxy = httpProxy.createProxyServer({});
(...)
app.get('/fooService/*', function (request, response) {
"use strict";
return proxy.web(request, response, {
target: 'http://fooservice.com'
});
});

关于javascript - 如何编写服务于大多数本地文件但将某些文件重新路由到另一个域的 Node 快速应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com