我正在为Angular2应用程序实现登录。单击“登录”按钮时,将发出对“/ doLogin”的HTTP请求。 Webpack-dev服务器配置为将该URL段(以及其他几个)代理到后端服务器:
proxy: [{
context: ['/doLogin', ...],
target: 'http://mybackendserver.com',
secure: false
}]
成功验证后,后端服务器会将响应重定向到“/ dashboard”。 (注意我们使用的是PathLocationStrategy,没有哈希。)但在某些情况下,基于命令行参数,我想绕过auth并在单击Login按钮时直接转到Dashboard。
根据Webpack-dev-server文档:“可以根据函数的返回选择性地绕过代理。该函数可以检查HTTP请求,响应和任何给定的代理选项。它必须返回false或者将被提供的URL路径,而不是继续代理请求。“所以我为登录添加了这样一个旁路选项:
proxy: [{
context: ['/doLogin', ...],
target: 'http://mybackendserver.com',
secure: false,
bypass: function(req, res, proxyOptions) {
if (req.url == '/doLogin' && SKIP_LOGIN) {
return '/dashboard';
}
}
}]
但是,从不加载仪表板。该页面将重新加载默认回退路由(再次是登录页面)。我尝试调试Angular路由代码,我很确定'/ dashboard'永远不会出现在那里。
我是否遗漏了某些内容或代理实施中是否存在错误?
我们目前正在使用webpack v.2.1.0-beta.22,webpack-dev-server v.2.1.0-beta.2和webpack-dev-middleware v.1.6.1,尽管我尝试了各种各样的更新版本的组合,包括webpack-dev-server 2.2.0-rc.0,但它们在代理绕过方面的行为方式相同。