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()
    }
  }
}

клиент возвращает первого пользователя коллекции, а не того, который ожидается для события, заданного в качестве параметра публикации.

Можете ли вы сказать мне, где я ошибаюсь, у меня много проблем с документированием моих хороших практик

Откуда вы берете currentWeek и currentYear?

ghybs 30.07.2019 03:42

я обновил свой код

spitfire378 30.07.2019 12:25

Вы проверили currentEvent.user_id?

ghybs 30.07.2019 13:35

@ghybs да, я получаю идентификатор текущего события

spitfire378 05.08.2019 08:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь две проблемы:

Во-первых, публикация предназначена для возврата курсора (с помощью .find), а не отдельного документа (что делается с помощью .findOne).

Во-вторых, текущий код на сервере использует только моменты запуска/в момент импорта модуля, т.к. код находится в глобальной области видимости и не перевыполняется. Поэтому, если ваш сервер работает дольше недели/года, он не вернет точный набор документов.

Чтобы вернуть все документы, соответствующие запросу, используйте .find. Чтобы всегда получать текущие моменты, вы можете обернуть это внутри функции. В обобщенном виде код может выглядеть так:

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

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

Meteor.publish('currentUser', function () {
  const currentEvent = getCurrentEvent()
  return Meteor.users.find({ _id: currentEvent.user_id });
});

Дальнейшие чтения:

https://docs.meteor.com/api/pubsub.html#Meteor-публикация

https://guide.meteor.com/data-loading.html

Спасибо за ваш ответ, мне было трудно понять принцип подписки и публикации, но я, наконец, начинаю видеть более ясно. Спасибо за ссылки!

spitfire378 14.08.2019 17:22

Другие вопросы по теме