我正在尝试使用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
    });
  }
});

最佳答案

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');
    }

关于javascript - 模拟调用'deals.insert'错误的影响时发生异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43696633/

10-09 21:10