在Hapi JS应用程序中传递数据

时间:2016-01-18 20:22:24

标签: hapijs

我想从域中检测当前选定的语言(例如es.domain.com,de.domain.com),因此我需要将其传递给所有非静态路由处理程序和所有视图。

要检测语言,我需要一个请求对象。但是全局视图上下文可以更新无法访问请求对象的位置(在server.views({})中)。此外,server.bind(将数据传递给路由处理程序)仅在无法访问请求对象的情况下起作用。

Hapi版本:11.1.2

1 个答案:

答案 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。如果您使用的是旧版本,则最好使用扩展点方法。