Vue.js Meteor/VueJS发布特定项目

Vue.js Meteor/VueJS发布特定项目,vue.js,meteor,Vue.js,Meteor,我正在尝试发布与当前事件关联的用户 但我想我还没有完全理解meteor和vuejs之间的出版和订阅原则 服务器端: import { Meteor } from 'meteor/meteor'; import Events from './collections'; import moment from "moment"; const currentWeek = moment().week(); const currentYear = moment().year(); const curren

我正在尝试发布与当前事件关联的用户 但我想我还没有完全理解meteor和vuejs之间的出版和订阅原则

服务器端:

import { Meteor } from 'meteor/meteor';
import Events from './collections';
import moment from "moment";

const currentWeek = moment().week();
const currentYear = moment().year();
const currentEvent = Events.findOne({ week: currentWeek, year: currentYear })

Meteor.publish('currentUser', function () {
  return Meteor.users.findOne({ _id: currentEvent.user_id } );
});
客户端:


export default {
  meteor: {
    $subscribe: {
      currentUser: [],
    },
    currentUser() {
      return Events.findOne()
    }
  }
}
客户端返回集合的第一个用户,而不是作为发布参数给定的事件的预期用户

你能告诉我哪里错了吗?我很难记录我的良好实践

这里有两个问题:

首先,出版物旨在返回光标(使用
.find
),而不是单个文档(使用
.findOne

其次,服务器上的当前代码仅使用启动/导入模块时的时间,因为代码在全局范围内,不会重新执行。因此,如果您的服务器运行时间超过一周/年,它将不会返回准确的文档集

要返回与查询匹配的所有文档,请使用
.find
。为了始终获得当前时刻,可以将其包装在函数中。代码可能如下所示:

从'Meteor/Meteor'导入{Meteor};
从“/collections”导入事件;
从“时刻”中导入时刻;
常量getCurrentEvent=()=>{
const currentWeek=力矩().week();
const currentYear=力矩().year();
返回Events.findOne({week:currentWeek,year:currentYear});
}
Meteor.publish('currentUser',函数(){
const currentEvent=getCurrentEvent()
返回Meteor.users.find({u-id:currentEvent.user\u-id});
});
进一步阅读:


你从哪里获得
currentWeek
currentYear
?我已经更新了我的代码你是否检查了
currentEvent.user\u id
?@ghybs是的,我得到了当前事件的id,请回答,我很难理解副脚本和出版的原则,但我终于开始看得更清楚了。Thx的链接!