向 Sequelize FindOne 返回的对象添加属性

新手上路,请多包涵

我正在尝试将属性添加到 sequelize 实例,然后再将其传递回客户端。

 router.get('/cats/1', function (req, res) {
    Cat.findOne({where: {id: 1}})
        .then(function (cat) {
            // cat exists and looks like {id: 1}
            cat.name = "Lincoln";
            // console.log of cat is {id: 1, name: Lincoln}
            res.json(cat);
        });
});

客户端只能看到 {id: 1} 而不是新添加的密钥。

  • 这里发生了什么?
  • Sequelize 返回什么类型的对象?
  • 如何向我的猫添加新属性并将它们发回?

原文由 Rastalamm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 630
2 个回答

以下适用于 sequelize v4。

 ...
const order = Order.findOne(criteria);
order.setDataValue('additionalProperty', 'some value');
...

希望这可以帮助。有点晚了,但以防万一人们仍在寻找答案。

原文由 Eric Xin Zhang 发布,翻译遵循 CC BY-SA 4.0 许可协议

Sequelize Model 类(你的猫是它的实例)有一个 toJSON() res.json 可能会用来序列化你的猫的方法。该方法返回 Model#get()https://github.com/sequelize/sequelize/blob/95adb78a03c16ebdc1e62e80983d1d6a204eed80/lib/model.js#L3610-L3613 )的结果,它只使用模型上定义的属性。如果您希望能够设置猫的名称,但不希望将名称存储在数据库中,则可以在定义猫模型时使用虚拟列:

 sequelize.define('Cat', {
  // [other columns here...]
  name: Sequelize.VIRTUAL
});

或者,如果您不想向模型定义添加属性:

 cat = cat.toJSON(); // actually returns a plain object, not a JSON string
cat.name = 'Macavity';
res.json(cat);

原文由 Tom Jardine-McNamara 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题