【问题标题】:Custom json response in sequelize.jssequelize.js 中的自定义 json 响应
【发布时间】:2015-01-06 19:48:07
【问题描述】:

我使用 sequelize 从 mysql db 获取 json。所以我有两个模型 MenuProduct 进一步的关联,如:

Menu.js

  classMethods: {
    associate: function(models) {
      Menu.hasMany(models.Product, {foreignKey: 'menu_id'})
    }
  }

Product.js

  classMethods: {
    associate: function(models) {
      Product.belongsTo(models.Menu, {foreignKey: 'menu_id'})
    }
  },
  // IF I ADD BELOW CODE I HAVE ERROR: Possibly unhandled ReferenceError: menu is not defined
  instanceMethods: {
     toJSON: function () {
       var values = this.get();
       if (this.Menu) {
         values.icon = menu.icon;
       }

       return values;
     }
   }

 Product.findAll({
      where: { /* id: */ },
      include: [
          { model: Menu }
      ]
  }).success(function(match) {
    res.json(match);
 });

然后我得到:

{
  "id": 3,
  "menu_id": 1,
  "product_title": "whatever",
  "price": 22,
  "createdAt": "0000-00-00 00:00:00",
  "updatedAt": "0000-00-00 00:00:00",
  "Menu": {
    "id": 1,
    "menu_title": "whatever",
    "icon": "someurlforicon",
    "createdAt": "2014-12-29T00:00:00.000Z",
    "updatedAt": "2014-12-29T00:00:00.000Z"
  }
}

是否可以仅使用菜单模型中的图标扩展产品数组?喜欢:

{
  "id": 3,
  "menu_id": 1,
  "product_title": "whatever",
  "price": 22,
  "icon": "someurlforicon",
  "createdAt": "0000-00-00 00:00:00",
  "updatedAt": "0000-00-00 00:00:00",
}

感谢您的帮助!

【问题讨论】:

    标签: javascript mysql node.js sequelize.js


    【解决方案1】:

    您可以向 Product 模型添加自定义 toJSON 方法:

    instanceMethods: {
      toJSON: function () {
        var values = this.get();
    
        if (this.Menu) {
          values.icon = this.Menu.icon;
        }
    
        return values;
      }
    }
    

    【讨论】:

    • 您好 Jan 感谢您的回答!我尝试添加您的解决方案,但出现错误:Possibly unhandled ReferenceError: menu is not defined
    • 对不起,我有点太快了——当然你必须在检查this.Menu是否被定义后才能真正访问它
    • 谢谢!!!甚至下一件事我可以以某种方式删除菜单子数组吗?只是在产品数组中有icon 吗?
    • delete values.Menu - 这只是我们正在使用的普通 javascript 对象 :) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    • 从 V4 开始已经过时了。你需要做 Product.prototype.toJSON = function() {} docs.sequelizejs.com/manual/tutorial/upgrade-to-v4.html
    【解决方案2】:

    产品和菜单是多对一的关联。所以 Product.find() 不能返回产品数组。因为产品对应一个菜单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      相关资源
      最近更新 更多