У меня есть node.js-сервер 0.10.12 и express.js 4.8.5. node.js - это веб-сервер, включающий 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
я установил свой слой WMS Geoserver, как этот
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="#" onclick="location.href='http://www.geo.admin.ch/internet/geoportal/' +'en/home.html'; return false;">' +'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')));
. Я положил его в router.get
index.js
. Еще ничего. Я не понимаю, что не так.
Спасибо
Примечания
Это работает в Internet Explorer 11. Нет ошибок, и я действительно вижу слой
Нет ошибок в firefox 30, но я не вижу слой
В chrome 45 Я не вижу слой, и я получаю эту ошибку