我想从域中检测当前选定的语言(例如es.domain.com,de.domain.com),因此我需要将其传递给所有非静态路由处理程序和所有视图。
要检测语言,我需要一个请求对象。但是全局视图上下文可以更新无法访问请求对象的位置(在server.views({})中)。此外,server.bind(将数据传递给路由处理程序)仅在无法访问请求对象的情况下起作用。
Hapi版本:11.1.2
答案 0 :(得分:3)
您可以尝试这样的事情:
server.ext('onPreResponse', function (request, reply) {
if (request.response.variety === 'view') {
request.response.source.context.lang = request.path;
}
reply.continue();
});
这会将lang
数据点附加到正在发送到视图中的上下文。您必须从网址中提取lang,因为request.path
可能不是您真正想要的。
此外,如果您查看here,您会看到一些请求数据可通过reply.view()
提供给每个视图。如果区域设置/语言可直接在其中一个数据中使用点,或者可以从它们派生,你可以完全跳过扩展点的方法。
同样,这是假设版本10+的hapi。如果您使用的是旧版本,则最好使用扩展点方法。