无法在node.js上设置代理
我在端口5550上安装了node.js 4.1.1和express.js 4.8.5。在端口8080上也安装了Geoserver 2.8.0。两台服务器都在同一台笔记本电脑上。
节点上的应用程序想要从Geoserver访问某些地图数据,这些是关于Openlayers的详细信息
source: new ol.source.TileWMS({
url: 'http://localhost:8080/geoserver/mymap/wms?',
crossOrigin: 'anonymous',
// I also tried crossOrigin: 'localhost:8080/' and crossOrigin: 'localhost:5550/' but nothing
params: {'LAYERS': 'mymap:layer, mymap:anotherLayer, FORMAT': 'image/png' ,'CRS': 'EPSG:3857'},
serverType: 'geoserver'
在Geoserver上设置CORS或代理服务器不是可能的技术问题(旧的Jetty核心,野生的黑客解决方案,旧的Jetty版本的不可用的jars
)。 为了避免CORS和Access Control Allow Origins
错误我想在节点上设置代理。 我只是想使用节点,因为它更容易设置。
根据这个和以前的问题,我必须设置一个反向代理,所以
我想我的概念是正确的,但我不知道如何实现这一点。 我选择了http-proxy-middleware来做到这一点。 我在我的app.js
上添加了
var proxyMiddleware = require('http-proxy-middleware');
var proxy = proxyMiddleware('http://localhost:8080/geoserver', {
target: 'http://localhost:5550',
changeOrigin: true
});
var app = express();
app.use('/' , function (req, res) {
res.render('index', { title: 'testing', head: 'Welcome Testing Area'});
});
app.use(proxy);
app.listen(5550);
在控制台上,我看到[HPM] Proxy created: /geoserver -> http://localhost:5550
但我仍然收到错误Image from origin 'http://localhost:8080' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5550' is therefore not allowed access. The response had HTTP status code 404.
Image from origin 'http://localhost:8080' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5550' is therefore not allowed access. The response had HTTP status code 404.
我不明白如何实现这一点。 请指出我的错误,或者如果我没有得到正确的概念。 请帮助我理解。
谢谢
UPDATE
这些是我打开浏览器控制台时看到的标题
General
Remote Address:[::1]:8080
Request URL:http://localhost:8080/geoserver/mymap/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=mymap%3Aplanet_osm_polygon%2C%20mymap%3Aplanet_osm_line%2C%20mymap%3Aplanet_osm_roads%2C%20mymap%3Aplanet_osm_point&TILED=true&CRS=EPSG%3A3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX=2269873.9919565953%2C4618019.500877209%2C2348145.508920616%2C4696291.017841229
Request Method:GET
Status Code:404 Not Found
Response Headers
HTTP/1.1 404 Not Found
Content-Type: text/html; charset=iso-8859-1
Content-Length: 1408
Server: Jetty(6.1.8)
Request Headers
Accept:image/webp,image/*,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:el-GR,el;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost:5550
Referer:http://localhost:5550/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
看起来你错误地配置了代理。
以Geoserver作为目标的正常语法:
var proxy = proxyMiddleware('/geoserver', {
target: 'http://localhost:8080',
changeOrigin: true
});
或者用简写语法:
此配置的行为与上一个完全一样。
var proxy = proxyMiddleware('http://localhost:8080/geoserver', {
changeOrigin: true
});
chimurai是对的。 终于为我工作的是设置http-proxy-middleware
在我的app.js
我现在有
var proxyMiddleware = require('http-proxy-middleware');
var proxy = proxyMiddleware('http://localhost:5550', {
target: 'http://localhost:8080',
changeOrigin: true,
xfwd: true
});
/*
the above can be replaced by chimurai's version :
var proxy = proxyMiddleware('/geoserver', {
target: 'http://localhost:8080',
changeOrigin: true
});
and will still work
*/
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', function(req, res, next) {
httpProxy.createProxyServer({target:'http://localhost:8080'});
next();
});
app.use(proxy);
app.listen(5550);
我删除了这个crossOrigin: 'anonymous',
在我的Openlayers代码中,我修复了Openlayers中的链接错误,现在可以正常工作。
我也试图通过在Geoserver上设置一个代理来解决这个问题,但这是不可能的,因为Geoserver运行一个旧的Jetty版本,现在是EOL,所以没有正式的解决方案来代理Geoserver并且不升级它。
通过Node解决这个问题是最好的解决方案
链接地址: http://www.djcxy.com/p/96419.html