Ошибка при вставке в коллекцию в Метеоре
Я использую метеор с 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. Заинтересованные люди, которые поддерживают это, изучат проблему.