【发布时间】:2017-11-21 12:12:38
【问题描述】:
我开发了一个 Angular 1.6 单页应用程序,它由 静态快速服务器 提供服务。
Angular 应用程序应该将异步请求发送到我无法控制的远程服务器。
不幸的是,这个远程服务器没有正确响应 Angular 预检 OPTIONS 请求 - 因此 Angular 拒绝发送实际请求,因为远程不完全支持 CORS。 (远程服务器是 Jira 服务器实例,问题已知但仍未解决)。
所以我决定尝试将请求代理到远程服务器,并确保 Angular 只与代理服务器通信,代理服务器正在向远程发送请求并返回远程服务器的响应和 使其与 CORS 完全兼容。
简而言之:
调用节点服务器 -> Angular 请求 -> 节点 Http 代理 -> 远程服务器
远程服务器响应 -> 节点 Http 代理(丰富 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);
【问题讨论】:
-
可以使用
console.log()进行调试。 -
代码看起来是对的,它应该可以工作。我不确定更改原点部分。请向我们提供您所面临的具体错误。是在 nodejs 部分,还是 cors 问题仍然存在。如果代理工作正常,您应该不会有任何 cors 问题,因为您在同一个域上请求。
-
谢谢 - 这是一个艰难的过程 :-( 至少对我来说。
标签: javascript angularjs node.js express node-http-proxy