Ho server node.js 0.10.12 e express.js 4.8.5. Node.js è il server web, include gli openlayer 3.9.0.node.js e geoserver CORS
Geoserver 2.1.3 serve il livello WMS. Successivamente, implementerò i livelli vettoriali.
C'è solo un percorso (per la pagina di indice)
var routes = require('./routes/index');
Il index.js
contiene
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;
Così il app.js
ha
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')));
ho aggiunto il seguente per 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);
E nel index.ejs
ho impostato il mio strato Geoserver WMS come questo
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'
})
})
E ottengo l'errore
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.
Ho provato un sacco di varianti Ho trovato online. Inserisco il codice prima dello app.use(express.static(path.join(__dirname, 'public')));
. L'ho inserito all'interno dello router.get
dello index.js
. Ancora niente. Non riesco a capire cosa c'è che non va.
Grazie
note
Questo funziona in Internet Explorer 11. Nessun errore e posso effettivamente vedere lo strato
Nessun errore in Firefox 30, ma non riesco a vedere lo strato
In chrome 45 Non riesco a vedere il livello e ottengo quell'errore
Hai visto - https://stackoverflow.com/a/25025579/4640499? –
@slevin si sta aggiungendo CORS sul lato sbagliato. Stai effettuando la connessione dall'app del nodo al tuo Geoserver. Quindi, CORS dovrebbe essere aggiunto nel tuo Geoserver, non nell'app Node. – hassansin
@JonatasWalker Sì, grazie, ho intenzione di reimpostare il mio Geoserver in base a questo – slevin