【发布时间】:2015-12-25 17:47:45
【问题描述】:
我有 node.js 服务器 0.10.12 和 express.js 4.8.5。 Node.js 是 Web 服务器,包括 openlayers 3.9.0。
Geoserver 2.1.3 服务于 WMS 层。稍后,我将实现矢量图层。
只有一条路线(用于索引页面)
var routes = require('./routes/index');
index.js 包含
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('index', { title: 'openlayers3 testing', head: 'Welcome' });
next();
});
module.exports = router;
所以app.js 有
var routes = require('./routes/index');//explained above
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')));
我为 CORS 添加了以下内容
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
app.get('/', routes);
在index.ejs 中,我将我的 Geoserver WMS 图层设置为这样
var ait = new ol.layer.Tile({
extent: textent,
source: new ol.source.TileWMS({
url: 'http://localhost:8080/geoserver/mymap/wms',
crossOrigin: 'anonymous',
attributions: [new ol.Attribution({
html: '© ' +'<a href="http://www.geo.admin.ch/internet/geoportal/' +'en/home.html">' +'National parks / geo.admin.ch</a>'
})],
params: {'LAYERS': 'mymap:planet_osm_polygon, mymap:planet_osm_line, mymap:planet_osm_roads, mymap:planet_osm_point'},
serverType: 'geoserver'
})
})
我得到了错误
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.
我尝试了很多我在网上找到的变体。我将代码放在app.use(express.static(path.join(__dirname, 'public'))); 之前。我把它放在index.js 的router.get 里面。依然没有。我不明白出了什么问题。
谢谢
笔记
这在 internet explorer 11 中有效。没有错误,我实际上可以看到图层
firefox 30 没有错误,但我看不到图层
在 chrome 45 中,我看不到图层并且出现了该错误
【问题讨论】:
-
你看到了吗 - stackoverflow.com/a/25025579/4640499?
-
@slevin 您在错误的一侧添加了 CORS。您正在从节点应用程序连接到您的地理服务器。因此,CORS 应该添加到您的 Geoserver 中,而不是 Node 应用程序中。
-
@JonatasWalker 是的,谢谢,我打算根据这个重新设置我的地理服务器
-
@ɦassansin 你好。我意识到这一点,你是对的。我现在阅读有关 CORS 的文章。但是,为了对话,假设我只能访问和设置
node.js而不是Geoserver。那我该怎么办?将代理设置为node.js?谢谢
标签: node.js express openlayers openlayers-3 geoserver