私はnode.jsサーバー0.10.12とexpress.js 4.8.5を持っています。 Node.jsはWebサーバーで、openlayers 3.9.0を含んでいます。node.jsとgeoserver CORS
Geoserver 2.1.3はWMSレイヤーを提供します。後で、私はベクトルレイヤーを実装します。
あり(インデックス・ページ用)1つのルートのみ
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
は私がCORSのために次のことを追加
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')));
を持って
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
に私はこの
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'
})
})
のように私のGeoserver WMSレイヤを設定し、私はバリエーションの多くを試してみました
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
の中に入れました。まだ何も。何が間違っているのか分からない。
おかげ
ノート
これは、Internet Explorerの11エラーなしで動作し、私は実際のFirefox 30で層に
んがエラーを見ることはできませんが、私は層
を参照することはできませんクロム45ではレイヤーが見えず、そのエラーが発生します
- https://stackoverflow.com/a/25025579/4640499ご覧ましたか? –
@slevin間違った側にCORSを追加しています。ノードアプリケーションからGeoserverに接続しています。 CORSはGeoserverに追加する必要があります。ノードアプリケーションには追加しないでください。 – hassansin
@JonatasWalkerはい、ありがとう、私はGeoserverをこの – slevin