代理来支持我的Angular请求到远程非

我开发了一个由静态快速​​服务器提供服务的Angular 1.6单页面应用程序

Angular 应用程序应该发送异步请求到我无法控制的远程服务器

不幸的是,这个远程服务器不能正确回答Angular预检选项请求,因此Angular拒绝发送实际的请求,因为远程服务并不完全支持CORS。 (远程服务器是Jira服务器实例,问题已知,但仍未解决)。

因此,我决定尝试将请求代理到远程服务器,并确保Angular只与正在向远程发送请求的代理服务器通信,并返回远程服务器的响应并使其完全与CORS兼容

简而言之:

调用节点服务器 - >角度请求 - >节点Http代理 - >远程服务器

远程服务器响应 - > Node Http Proxy(丰富CORS) - > Angular

这是我到目前为止,但因为我绝对没有节点/表达亲我不明白为什么我没有得到答案 - 我甚至不知道如何正确调试这一点。

我以某种方式评论了代码,因为我知道应该怎么做。

const express = require('express');
const httpProxy = require('http-proxy');
const http = require("http");
const path = require("path");
const app = express();
const bodyParser = require('body-parser');

var proxyOptions = {
    changeOrigin: true
};

httpProxy.prototype.onError = function (err) {
    console.log(err);
};


// this should create the node http proxy server on port 3001
var apiProxy = httpProxy.createProxyServer(proxyOptions).listen(3001);

// I can see the following output when deploying my app
console.log('Forwarding API requests to ' + apiForwardingUrl);

// all incoming / requests on node server should be forwarded to Angular single page app's index.html
app.get('/', function(req, res) {
  res.sendFile(__dirname + '/index.html');
});

// providing static files for Angular app
app.use("/static", express.static(path.join(__dirname, "static")));

// all incoming requests to /jira/* should be forwared and responded by node http proxy server 
app.all("/jira/*", function(req, res) {
    apiProxy.web(req, res, {target: 'www.example.com'});
});

// make sure POST requests to node http proxy server are fully supported
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

// Create node server on port 3000
http.createServer(app).listen(3000);

我想现在我发现了这个问题:

当我查看'targetURL'时,这是'www.example.com',当我console.log它。 但http代理似乎追加(这是完全正确的)req.originalURL它:

www.example.com/jira/somestuff // when I call /jira/somestuff from Angular

但是: URL的/ jira /部分只是为了区分代理和非代理的调用。

因此,正确的网址需要为www.example.com/somestuff。

我尝试了几种方法来改变targetUrl,req.originalUrl等来解决这个问题 - 迄今为止没有成功。

所以我用这个丑陋的解决方案成功地测试了它,我的下一个问题是围绕SSL,但显然他连接了:

app.all("/jira/*", function(req, res) {
    req.originalUrl = req.originalUrl.slice(5);
    apiProxy.web(req, res, {target: apiForwardingUrl});
});
链接地址: http://www.djcxy.com/p/89113.html

上一篇: proxy to support my Angular requests to a remote non

下一篇: Charles debugging proxy not connecting to localhost