【问题标题】:How to return data as JSON in Sequelize如何在 Sequelize 中以 JSON 格式返回数据
【发布时间】:2015-07-04 08:14:04
【问题描述】:

当我进行 Sequelize 查询时,它返回给我一个对象(或数组),我猜它是一个 Sequelize 模型(或模型数组(集合类型??)),但它没有在任何地方记录,所以我我只是猜测。我总是希望结果是 JSON。我可以在查询中传递什么来强制执行此操作吗?如果可能的话,我宁愿不要手动按摩我返回为 JSON 的每个结果。

The documentation 显示这个返回一个字符串:

console.log(JSON.stringify(users))

所以有一些内置的序列化。现在我正在这样做,使用未记录的toJSON() 方法:

query().then(function(result) {
    if(result.length) {
        return result.toJSON();
    } else {
        return result.map(function(item) {
            return item.toJSON();
        });
    }
});

这很麻烦。

【问题讨论】:

    标签: node.js postgresql sequelize.js


    【解决方案1】:

    您可以在查询中使用raw: true,但这并不总是如您所愿,尤其是在关联方面。

    query({
        // ...
        raw: true
    }).then(function(result) {
        // Result is JSON!
    });
    

    但是,在您使用关联的情况下,您可能会得到这样的结果:

    {
        foo: true,
        "associated.bar": true
    }
    

    而不是你所期望的:

    {
        foo: true,
        associated: {
            bar: true
        }
    }
    

    【讨论】:

    • 完美答案。
    【解决方案2】:

    当您从数据库中检索模型时,您可以在结果上调用.get({ plain: true}),它将为您处理转换。您可以将函数调用的值分配给变量。例如

    ..).then(function(user){ var _user = user.get({ plain: true}); console.log(_user); //Should be valid json object });

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      如果您正在执行具有多个结果的查询,您应该期望返回一个数组。您应该会发现结果数组中的每个元素都是一个 JSON 对象。

      您应该能够像这样访问给定字段:result[0].myfieldname

      【讨论】:

      • 这是否意味着无法强制 Sequelize 始终以 JSON 形式返回结果?
      • 这意味着它们应该已经在 J​​SON 中了。尝试使用 JSON.stringify() 来查看里面的内容。您的代码应如下所示:query().then(function(result) { console.log(JSON.stringify(result)) });
      猜你喜欢
      • 2011-06-11
      • 1970-01-01
      • 2017-02-24
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多