插入失败:错误:标题是必需的

时间:2017-09-09 23:52:19

标签: javascript meteor meteor-autoform simple-schema

我尝试使用以下代码将对象添加到对象数组中,该对象数组是集合条目中的键,但我得到了一个奇怪的响应"插入失败:错误:标题需要"。我在meteor上使用简单的schema / autoform。

之前是否有人遇到此问题(并有解决方案)?

Template.dashboard.events({
  'click .requestinvite'(e,t) {
    Posts.insert({ _id : $(e.currentTarget).attr('_id')},
    {$push: { invitesRequested : {username : Meteor.userId()} }}
  );
}
});

这是coffeescript中的相关简单架构

Schemas.Posts = new SimpleSchema
    title:
        type:String
        max: 60
        optional: true

    content:
        type: String
        optional: false
        autoform:
            rows: 5

    createdAt:
        type: Date
        autoValue: ->
            if this.isInsert
                new Date()

    updatedAt:
        type:Date
        optional:true
        autoValue: ->
            if this.isUpdate
                new Date()

    invitesRequested:
        type: [Object]
        optional: true
        defaultValue: []


    owner:
        type: String
        regEx: SimpleSchema.RegEx.Id
        autoValue: ->
            if this.isInsert
                Meteor.userId()
        autoform:
            options: ->
                _.map Meteor.users.find().fetch(), (user)->
                    label: user.emails[0].address
                    value: user._id

2 个答案:

答案 0 :(得分:1)

首先,根据正确的javascript分配标准,你在代码中犯了错误。

如果您的代码遭到黑客攻击并且在未分配任何ID的情况下调用click事件,该怎么办?

您的代码必须如下。

Template.dashboard.events({
  'click .requestinvite'(e,t) {
    var id = $(e.currentTarget).attr('_id');
    if(id){
    Posts.insert(
        { 
            _id : id
        },
        {   
            $push: { 
                    invitesRequested : {username : Meteor.userId()} 
                }
        }
    );
    } else {
        //do something here when you don't have id here, or the `click` event is hacked on UI to work without id'
    }
}
});

由于您的SimpleSchema提供了有关title字段的错误,如果不是强制性的,请在定义optional : true字段时使用title

e.g。

title: {
    type: String,
    label: "Title",
    optional: true   //<---- do this
}
  

注意:默认情况下,所有密钥都是必需的。设置optional: true以更改该内容。

答案 1 :(得分:0)

答案是使用Posts.update代替。但Ankur Soni的帖子引导我朝着正确的方向解决这个问题。