【发布时间】:2017-11-02 20:48:45
【问题描述】:
我正在使用该示例使用 nodejs 和 expressjs 设置 Angular 4 Universal: https://github.com/FrozenPandaz/ng-universal-demo
我一直在尝试将数据从第一个完整页面加载传递到 Angular 4 最终应用程序。
用例是传输从标头中检测到的语言,以从 Angular 4 服务器渲染器中吸收它,以便它可以使用正确的语言来翻译内容。
到目前为止,我发现的唯一方法是使用来自 expressjs 的“/”路由的 HTTP 标头进行语言检测,并使用 HTTP 302 重定向到“/fr”,例如,如果用户语言是法语。
main.server.ts
app.param('language', function(req: any, res, next, language) {
if(language.length == 2)
{
req.language = language;
next();
} else {
next(new Error('Invalid language found'));
}
});
// Redirect incoming trafic without language in url (302 used so the browser do not seal that redirection if the user decides to change language and reload)
app.get('/', function(req, res) {
res.set('location', baseUrl + '/' + getLanguage(req);
res.status(302).send();
});
routes.ts
export const ROUTES: string[] = [
'/error',
'/:language',
'/:language/download'
];
它可以工作,因为我能够配置 Angular 4 路由器并检索当前路由,但它有点脏。
app.module.ts
RouterModule.forRoot([
{ path: '', component: HomeView, pathMatch: 'full'},
{ path: ':language/download', loadChildren: './+lazy/lazy.module#LazyModule'},
{ path: ':language/', redirectTo: ''},
// Catch all if expressjs allowed this url
{ path: '**', component: HomeView }
])
有没有比 URL 参数更好的方法来使用 Angular Universal 将数据从 ExpressJS 传递到 Angular 4 应用程序?
如何从 Angular Universal 的完整负载中传输更多数据(例如有关用户会话的信息)?
【问题讨论】:
-
您找到解决方案了吗?我也遇到了同样的问题。
标签: express angular2-routing angular-universal