nodejs 反向代理-geoserver为例

之前提到,geoserver 会出现跨域问题,对开发造成一定不便,且tomcat设置允许跨域也挺麻烦。而反向代理是一个不错的选择,不说nginx,就聊聊nodejs

话不多说,直接上代码

const express = require('express');
const router = express.Router();
const proxy = require('http-proxy-middleware');
//设置跨域问题
router.all('*', function(req, res, next) {
     
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
  res.header("X-Powered-By",' 3.2.1');
  next();
});
const proxyOption = {
     
  target: 'http://10.10.52.120:8080',
  // pathRewrite: {
     
  //    '^/req/geoserver/' : '/geoserver/' // 重写请求,req/geoserver/解析为/geoserver/
  //  },
   changeOrigoin:true
 };
router.use('/geoserver',proxy.createProxyMiddleware(proxyOption))
module.exports = router;

代码中使用的是 Express,其中代理使用了http-proxy-middleware

路由对 geoserver 进行了拦截,然后转发到设置的地址,如代码所示。例如本例子node 在本地启用了端口 57776

访问 http://localhost:57776/geoserver/sf/wms?service=WMS&version=1.1.0&request=GetMap&layers=sf%3Aarchsites&bbox=589851.4376666048%2C4914490.882968263%2C608346.4603107043%2C4926501.8980334345&width=768&height=498&srs=EPSG%3A26713&format=application/openlayers
实际转发:
http://10.10.52.120:8080/geoserver/sf/wms?service=WMS&version=1.1.0&request=GetMap&layers=sf%3Aarchsites&bbox=589851.4376666048%2C4914490.882968263%2C608346.4603107043%2C4926501.8980334345&width=768&height=498&srs=EPSG%3A26713&format=application/openlayers

原来10.10.52.120:8080 上的geoserver不允许跨域,但通过node转发,即只需要换成 localhost:57776就能访问了 。

注:这个代理访问geoserver各种服务是没问题的,但无法登录,即访问 http://localhost:57776/geoserver/web 之后,输入账号密码无法登录进去,待解决

这里只是geoserver的代理,其他都可以依样画葫芦,更多配置项,可以访问 http-proxy-middleware

最后,可以点击查看 完整示例代码(github)

你可能感兴趣的:(后端,NODE,nodejs)