如何在sequelize findAll()中获得简单数组?

时间:2018-12-04 11:36:09

标签: javascript async-await sequelize.js

我正在尝试使用async/awaitsequelize样式获取具有特定ID的所有行。我的代码如下:

已更新

router.get('/', errorHandler(async (req, res, next) => {

    let domainsDB = await Domain.findAll({
            where: { accID: accID },
            attributes: [`adID`, `domain`, `status`]
    })

}

当我console.log(domainsDB)时,我看到以下内容:

[ 
     domains {
       dataValues: [Object],
       _previousDataValues: [Object],
       _changed: {},
       _modelOptions: [Object],
       _options: [Object],
       __eagerlyLoadedAssociations: [],
       isNewRecord: false },
     domains {
...
...
...
]

docs说它必须是一个数组。但是控制台日志显示这是一个对象。 dataValues中此对象中的数据正确。有我的域名。但是我希望可以使用一个数组。

如何用async/await?返回数组。谢谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您需要的是:raw : true

let domainsDB = await Domain.findAll({
    where: { accID: accID },
    attributes: [`adID`, `domain`, `status`],
    raw : true // <--- HERE
})

默认情况下,模型查询返回sequelize对象,要获得纯结果,我们需要传递raw : true

答案 1 :(得分:0)

await应该包装在带有异步键的函数中。

正确的代码段如下所示:

async fetchData(accID) {
  return await Domain.findAll({
      where: { accID: accID },
      attributes: [`adID`, `domain`, `status`]
  })
}

let data = fetchData(1);
console.log(data);

替代方法是:1)使用生成器函数2)Promise。

从本质上讲,它们是同一件事,它使您的同步代码充当异步代码。