无法从Sails.js中的其他模型中提取属性

时间:2013-10-05 19:11:26

标签: javascript node.js mongodb sails.js

这是一个客户模型,我想用address.js模型中的属性填充,但是,当我们使用Postman发布JSON时,我得到500验证错误,并没有提示问题的原因。任何帮助都会非常感激,因为我是sails,js,Javascript和编程的新手,所以我的语法可能不对!

//Customer.js

var Customer = {
    attributes: {
        honorific: 'STRING',
        first_name: 'STRING',
        middle_name: 'STRING',
        last_name: 'STRING',
        addr:'Address.address',
        delivery_addr:'Address.address',

        fullName:function() {
            return this.first_name + ' ' + this.last_name;
        }
    }
};

module.exports = Customer;

1 个答案:

答案 0 :(得分:1)

你不能告诉Sails以你想要的方式从另一个模型中提取数据。从本质上讲,您告诉Sails addrdelivery_addr属性属于Address.address类型,这是没有意义的,因为Sails中没有这样的类型。

您需要做的是使用其中一个Lifecycle Callback从地址模型中提取数据。从您的代码和解释来看,我无法准确理解地址是否适用于每个客户,或者更可能是每个客户的地址不同。如果是后者,我真的不明白为什么你想把地址从另一个模型拉到Customer模型。也许如果你更多地解释了你想要实现的目标和原因,我或许可以给你一个更好的答案。

在任何情况下,您都可以使用beforeValidation生命周期回调来从其他模型中提取数据(未经测试)。

module.exports = {

  attributes: {
    honorific: 'STRING',
    first_name: 'STRING',
    middle_name: 'STRING',
    last_name: 'STRING',
    addr: 'json',
    delivery_addr: 'json',
    fullName:function() {
      return this.first_name + ' ' + this.last_name;
    }
  },

  beforeValidation: function(values, cb) {
    Address.findOne(1).done(err, address) {
      if(err) return cb(err);
      values.addr = address.toJSON();
      values.delivery_addr = address.toJSON();
      cb();
    });
  }

};