我们正在寻找一种处理请求的连接信息的方法。我们需要的主要部分是域 - 用于身份验证。
这是我们目前的工作方式(不完全是 - 但是使用此代码剪切更容易显示它):
// 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
我不知道这是否必要,所以如果你知道一个构建方法来获取这些信息就会很好。