如何使用Grunt或Node服务器基于User-Agent(移动和桌面)redirect请求/代理?

我正在使用Grunt及其代理库grunt-connect-proxy 。 我有两台服务器设置为我的网站的桌面和移动版本(两者都有单独的资产等,因此分离)。 这两个网站都托pipe在0.0.0.0,但在不同的端口(9000和10000)。

我怎么能代理请求到两个不同的服务器基于User-Agent头(这将告诉我,如果它是一个移动或桌面用户)? NodeJS中有另一种解决scheme可以使用吗?

我最终编写了一个使用http-proxy和mobile-detect包来代理请求的NodeJS服务器。

var servers = { desktopClientFrontend: 'http://0.0.0.0:10000', mobileClientFrontend: 'http://0.0.0.0:9000', railsApiBackend: 'http://0.0.0.0:11000' }; var http = require('http'), url = require('url'), httpProxy = require('http-proxy'), MobileDetect = require('mobile-detect'); var proxy = httpProxy.createProxyServer({}); proxy.on('error', function (err, req, res) { res.writeHead(500, { 'Content-Type': 'text/plain' }); res.end('Something went wrong. And we are reporting a custom error message.'); }); var server = http.createServer(function(req, res) { if(url.parse(req.url).pathname.match(/^\/api\//)) { proxy.web(req, res, { target: servers.railsApiBackend }); } else { var mobileDetect = new MobileDetect(req.headers['user-agent']); if(mobileDetect.mobile()) { proxy.web(req, res, { target: servers.mobileClientFrontend }); } else { proxy.web(req, res, { target: servers.desktopClientFrontend }); } } }); server.listen(80);