2016-05-13 3 views
0

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

моей коллекции и схемы в 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 метод компонента Я получаю значения входов (имя и desc), а затем вызываю Meteor.call('recipes.insert', name, desc);. Я хочу, чтобы поле Author and CreatedBy создавалось автоматически на сервере с помощью простой схемы autoValue.

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

insert failed: Error: Author is required

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

let newRecipe = { 
    name, 
    description: desc, 
} 

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

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

NOTE: The Collection2 package always calls clean before every insert, update, or upsert.

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

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

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

Update

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

meteor:PRIMARY> db.recipes.findOne() 

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

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

обновление 2

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

+0

По умолчанию требуются все ключи. Установите опцию: true, чтобы изменить это. – muetzerich

+0

Я уже писал, что решил эту проблему. но я не понимаю смысла этого. –

+0

странная ситуация, что он даже работает без дополнительного: true! необходимо удалить поле автора - и это работает! –

ответ

1

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

Смежные вопросы