将FlowRouter SSR与meteor一起使用并获取服务器

时间:2016-05-04 15:21:57

标签: meteor nginx flow-router

我们正在寻找一种处理请求的连接信息的方法。我们需要的主要部分是域 - 用于身份验证。

这是我们目前的工作方式(不完全是 - 但是使用此代码剪切更容易显示它):

// Routes.jsx
FlowRouter.route('/my-route', {
  action(params) {
    params.auth = false;
    if (Meteor.isServer) {
      params.auth = Meteor.call('authMethod');
    } else {
      Meteor.call('authMethod', (err, auth) => {
        FlowRouter.setParams({
          auth
        });
      });
    }
    mount(MyApp, params);
  }
});



// Methods.js - on Server only 
Meteor.methods({
  'authMethod'() {
    if (Meteor.isClient) return false;
    if (!this.connection) return false;
    return this.connection.host === 'my-allowed-domain.com';
  }
});

如您所见,我们检查是否在我们的方法中设置了this.connection。这是因为当FlowRouter SSR将在服务器上呈现内容时,this.connection始终设置为null

现在有什么用?:

只有在客户端上呈现内容时,它才会起作用,因为客户端将调用Meteor方法并将连接对象发送给它。

它应该做什么?:

当FlowRouter SSR在服务器上呈现路由时,我们需要连接信息!

解决方案:

我们知道有一个Meteor.absoluteUrl方法,但这将始终返回绝对服务器路由 - 但我们正在使用nginx将多个域用于一个服务器,因此在我们的案例中Meteor.absoluteUrl始终是localhost:3000 on服务器

我们已经看到FlowRouter将ssrContext对象仅添加到服务器上的FlowRouter对象 - 但是这个对象只会添加属性槽 - 没有别的。

所以我们的问题:

当FlowRouter SSR呈现路由时,有没有办法获取有关连接的信息?当然,当没有来自客户端的实际请求时,我们无法获得连接信息 - 但是在FlowRouter SSR的情况下,客户端有请求,并且FlowRouter将以两种方式自动呈现路由:client&服务器。那么有办法获取信息吗?

更新

我做了一个小包,它在Picker的过程中添加了req对象。你可以在这里找到它:

https://github.com/TimoRuetten/meteor-flow-router-ssr-request

我不知道这是否必要,所以如果你知道一个构建方法来获取这些信息就会很好。

0 个答案:

没有答案