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

Я использую метеор с 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 компонента я получаю значения входных данных (name и desc) и затем вызываю 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 в моей рецептсхеме. поэтому код для поля автора:

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 заполнены правильно (author: null, потому что у меня еще нет системы учетных записей). но в этом смысле, что означает требуемый и optinal в схеме? мое решение (с optional: true) правильный?

обновление 2

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

1 ответ

Решение

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

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