Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与meteor一起使用FlowRouter SSR并获取服务器上的连接信息_Meteor_Nginx_Flow Router - Fatal编程技术网

与meteor一起使用FlowRouter SSR并获取服务器上的连接信息

与meteor一起使用FlowRouter SSR并获取服务器上的连接信息,meteor,nginx,flow-router,Meteor,Nginx,Flow Router,我们正在寻找一种处理请求连接信息的方法。我们需要的主要部分是域-用于身份验证 我们目前就是这样做的(不完全是这样,但是剪掉代码后更容易显示): 如您所见,我们检查是否在方法中设置了this.connection。这是因为当FlowRouter SSR将在服务器上呈现内容时,此连接始终设置为null 现在什么在起作用?: 只有当内容呈现在客户端上时,它才会工作,因为客户端将调用Meteor方法并向其发送连接对象 它应该做什么?: 此外,当FlowRouter SSR将在服务器上呈现路由时,我们需要

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

我们目前就是这样做的(不完全是这样,但是剪掉代码后更容易显示):

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

现在什么在起作用?:

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

它应该做什么?:

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

解决方案:

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

我们已经看到FlowRouter将只向服务器上的FlowRouter对象添加一个ssrContext对象,但这个对象只添加属性槽,其他什么都没有

那么我们的问题是:

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

更新

我已经完成了一个小程序包,它在Picker过程中添加了req对象。你可以在这里找到它:

我不知道这是否是必要的,所以如果你知道一个内置的方式来获取这些信息,那就太好了

// 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';
  }
});