Ошибка при вставке в коллекцию в Метеоре

Я использую метеор с SimpleSchema и Collection2. И реагировать. Я столкнулся с ошибкой при вставке элемента в коллекцию. вот код:

моя коллекция и схема в recipes.js:

import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import { SimpleSchema } from 'meteor/aldeed:simple-schema';

export const Recipes = new Mongo.Collection('recipes');

Recipes.deny({
  insert() { return true; },
  update() { return true; },
  remove() { return true; },
});

RecipeSchema = new SimpleSchema({
  name: {
    type: String,
  },
  description: {
    type: String,
  },
  author: {
    type: String,
    autoValue: function() {
      return Meteor.userId();
    },
  },
  createdAt: {
    type: Date,
    autoValue: function() {
      if(Meteor.isClient){
            return this.userId;
      } else if(Meteor.isServer){
            return Meteor.userId();
        }
    },
  }
});

Recipes.attachSchema(RecipeSchema);

Код моих методов в Methods.js

import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import { SimpleSchema } from 'meteor/aldeed:simple-schema';

import { Recipes } from './recipes.js';

 Meteor.methods({
   'recipes.insert'(name, desc) {
     new SimpleSchema({
       name: { type: String },
       desc: { type: String },
     }).validate({ name, desc });

     Recipes.insert({
       name,
       description: desc,
     });
   }
});

И в файле AddRecipeForm.jsx в методе handleSubmit компонента я получаю значения входных данных (имя и описание) и затем вызываю Meteor.call('recipes.insert', name, desc);. Я хочу, чтобы поля Author и CreatedBy автоматически создавались на сервере с простой схемой autoValue.

Но у меня всегда возникает ошибка, когда я пытаюсь что-то вставить в форму:

вставка не удалась: ошибка: требуется автор

Я попытался добавить этот код в метод recipe.insert:

let newRecipe = {
  name,
  description: desc,
}

RecipeSchema.clean(newRecipe);
Recipes.insert(newRecipe);

Но это не сработало. И в официальных документах с простой схемой я обнаружил, что это не обязательно:

ПРИМЕЧАНИЕ. Пакет Collection2 всегда вызывает clean перед каждой вставкой, обновлением или обновлением.

Я решил эту проблему, добавив optional: true в поля Author и CreatedAt в моей RecipeSchema. поэтому код для поля автора:

author: {
    type: String,
    optional: true,
    autoValue: function() {
      return this.userId;
    },
  },

Но я не хочу, чтобы эти поля были необязательными. Я просто хочу, чтобы autoValue работало, и эти поля были заполнены правильными значениями. Кто знает, почему возникает эта ошибка и как ее решить?

Обновить

Я заметил один важный момент. Я вставил разные рецепты в свою форму (которые, как мне кажется, работают неправильно из-за optional: true). когда я запускаю meteor mongo > `db.recipes.findOne()' и получаю разные рецепты, я получаю такие объекты:

meteor:PRIMARY> db.recipes.findOne()

{
        "_id" : "RPhPALKtC7dXdzbeF",
        "name" : "Hi",
        "description" : "hiodw",
        "author" : null,
        "createdAt" : ISODate("2016-05-12T17:57:15.585Z")
}

Так что я не знаю почему, но поля Author и CreatedBy заполнены правильно (автор: null, потому что у меня еще нет системы учетных записей). но таким образом, каково значение required и optinal в схеме? правильно ли мое решение (с optional: true)?

обновление 2

еще важный момент! я удалил поле author из схемы. и удалил optional:true из поля createdBy. и это работает! без опционального true. Я понял, что проблема в **поле автора* схемы. а в чем проблема?


person Oner Ksor    schedule 13.05.2016    source источник
comment
По умолчанию требуются все ключи. Установите необязательно: true, чтобы изменить это.   -  person muetzerich    schedule 13.05.2016
comment
Я уже писал, что решил проблему таким образом. но я не понимаю смысла этого.   -  person Oner Ksor    schedule 13.05.2016
comment
странная ситуация, что он работает даже без option:true! нужно убрать поле автора - и все работает!   -  person Oner Ksor    schedule 13.05.2016


Ответы (1)


Думаю, это внутренняя проблема Framework. Ваш первый код выглядит совершенно нормально. Вместо того, чтобы публиковать этот вопрос здесь, вы можете опубликовать его в репозитории aldeed: collection2 github. Заинтересованные люди, которые его поддерживают, рассмотрят этот вопрос.

person Ankur Soni    schedule 13.05.2016