打印一个sequalize对象(带有子依赖对象)

时间:2016-12-15 10:33:39

标签: json node.js sequelize.js stringify

我运行一个查询(让我们说一个User表,以及它所有相应的UserPhone条目,它们有一个userId作为外键,这样用户就有很多手机)。

我想将结果打印到控制台。

JSON.stringify仅用于打印用户,但不能打印用户手机,尽管它们存在于续集响应对象中

如果我改为使用util.inspect,我会得到所有内容,但也会产生很多噪音,例如$options和续集对象的许多其他属性。

我不打算用{raw: true}更改我的查询,只是想打印结果。

1 个答案:

答案 0 :(得分:0)

我有一个案例,我需要使用完整的Sequelize Instance但只想返回instance.dataValues,所以我迭代键(必要时递归)将其转换为原始值。我没有实际运行以下代码,因此可能包含一些错误

const extend = require('util')._extend;

function getDataValues(obj) {
  // create a copy of the dataValues
  const compact = extend({}, (obj && obj.dataValues) || obj);
  // loop over the keys
  Object.keys(compact).forEach(key => {
    const field = compact[key];
    // it's an Array of Models
    if (field instanceof Array) {
      compact[key] = field.map(include =>
        getDataValues(include)
      );
    }
    // it's a single Model
    if (field.dataValues) {
      compact[key] = extend({}, field.dataValues);
    }
    // otherwise it was a "string" or "int" or other simple value
  });
  // resolve the compacted dataValues
  return Promise.resolve(compact);
}

Model.findById(id, {
  include: [{
    model: Model2,
    as: "model_twos"
  }],
})
.then(model => getDataValues(model))
.then(compact => console.log(util.inspect(compact)));