代理来支持我的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