Метеор, как обновить коллекцию с оптимистичным интерфейсом
В моем приложении я разместил методы в общем месте между клиентом и сервером. таким образом, как предложено в метеорных документах, механизм метода заботится об оптимистичном пользовательском интерфейсе.
но я только что прочитал в блоге Дэвида Уэлдона о двухуровневой реализации, и для меня это имеет большой смысл.
Вопрос в том, как мне добиться оптимистичного пользовательского интерфейса с двухуровневой реализацией.
Переместите методы на сервер, обновите clientDB в шаблонных событиях для оптимистичного пользовательского интерфейса и запретите все обновления со стороны клиента до БД.
Есть ли способ, чтобы методы были доступны на стороне клиента, но могут быть вызваны только из другого метода?
Любой предложенный подход будет оценен.
1 ответ
Я думаю, что важно запретить вставки / обновления на стороне клиента. Как только это будет сделано, вы можете запустить код второго уровня с клиента, и он на самом деле ничего не сделает, потому что будет отказано.
Вот несколько абзацев из https://www.discovermeteor.com/blog/meteor-pattern-two-tiered-methods/ которые поддерживают это представление:
Клиент и Сервер
Хотя я заявлял, что функция postSubmit в первую очередь должна работать на сервере, она будет работать на клиенте в двух ситуациях.
Во-первых, при вызове из метода postSubmit как части симуляции на стороне клиента этого метода. В этом случае Meteor выполнит симуляцию, вставит запись в базу данных на стороне клиента и, наконец, вызовет вызов метода postSubmit на стороне сервера.
Другой вариант использования - это когда кто-то вызывает функцию postSubmit напрямую из консоли браузера. Если это произойдет, вызов Posts.insert() не удастся, потому что мы не разрешаем вставки на стороне клиента, и ничего не произойдет.
Обратите внимание, что разрешение / запрещение не влияет на код, выполняемый из метода Meteor, поэтому моделирование не завершается ошибкой, даже если вы не объявили политику разрешения / запрета.
Другими словами, ответ № 1: держите методы в общем месте и удалите небезопасный пакет (meteor remove insecure)
Ответ на вопрос № 2: не имеет значения, если они вызываются вне метода, потому что им будет отказано.