前端node服务器采用sails框架,代理模块使用的是node-http-proxy
问题:
所有数据都是从后端java服务器拿的,而且要屏蔽后端服务器,所以要在前端做服务器代理转发。对于http请求的转发,在http.js文件中加入一个转发中间件即可,如下:
forwardProxy: function (req, res, next) {
proxy.web(req, res, {target: url});
}
对于websocket的转发,解决办法如下:
在bootstrap.js中加入如下代码:
var websocketService = function (cb) {
var http = require('http'),
httpProxy = require('http-proxy');
var url = require('url');
var urlString = sails.config.collection_api_url;
var result = url.parse(urlString);
var proxy = new httpProxy.createProxyServer({
target: {
host: result.hostname,
port: result.port
}
});
var proxyServer = http.createServer();
proxyServer.on('upgrade', function (req, socket, head) {
proxy.ws(req, socket, head);
});
proxyServer.listen(1338);}
前端页面
var ws = new WebSocket(url);
ws.onopen = function () {}
ws.onmessage = function (event) {
showAlert(event.data);
}
后端服务器对websocket的处理请看Spring WebScoket 消息推送及问题总结