模拟调用'deals.insert'错误的效果时出现异常

时间:2017-04-29 14:08:47

标签: javascript mongodb reactjs meteor

我正在尝试使用react和meteor将表单数据提交到数据库。

我有一个表单的AddDeal组件和一个交易的集合,还有一个方法。

错误

  

模拟调用'deals.insert'的效果时出现异常   ReferenceError:_id未定义

获取错误:单击提交时需要ID。

插入时我不知道如何处理_id。

这是我的代码,感谢您的帮助!

onSubmit(e)函数

  onSubmit(e) {
    e.preventDefault();

    const title = this.state.title.trim();
    const description = this.state.description;
    const category = this.state.category;
    const location = this.state.location;
    const price = this.state.price.trim();

    e.preventDefault();

    if (title, description, category, location, price) {
      Meteor.call('deals.insert', title, description, category, location, price);
    }

    alert('Title is: ' + this.state.title + 'Description is: ' + this.state.description + 'Category is: ' + this.state.category
          + 'Location is: ' + this.state.location + 'Price: ' + this.state.price);

    this.setState({
      title: '',
      description: '',
      category: 'technology',
      location: 'USA',
      price: '0.00'
    });
  }

插入方法

export const Deals = new Mongo.Collection('deals');

if (Meteor.isServer) {
  Meteor.publish('deals', function () {
    return Deals.find({ userId: this.userId });
  });
}

Meteor.methods({
  'deals.insert'(_id, title, description, category, price, location) {
    if (!this.userId) {
      throw new Meteor.Error('not-allowed');
    }

    new SimpleSchema({
      _id: {
        type: String,
        min: 1
      },
      title: {
        type: String,
        optional: true
      },
      description: {
        type: String,
        optional: true
      },
      category: {
        type: String,
        optional: true
      },
      location: {
        type: String,
        optional: true
      },
      price: {
        type: Number,
        optional: true
      }
    }).validate({

    });

    Deals.insert({
      _id,
      title,
      description,
      category,
      location,
      price,
      createdAt: Date(),
      userId: this.userId
    });
  }
});

1 个答案:

答案 0 :(得分:1)

deals.insert,您要验证参数this.userId而不是this._id

我认为你需要改变这个:

'deals.insert'(_id, title, description, category, price, location) {
    if (!this.userId) {
      throw new Meteor.Error('not-allowed');
    }
...

到此:

'deals.insert'(_id, title, description, category, price, location) {
    if (!this._id) {
      throw new Meteor.Error('not-allowed');
    }