Как получить простой массив в sequelize findAll ()? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь получить все строки с определенным идентификатором в стиле async/await, используя sequelize.Мой код выглядит так:

ОБНОВЛЕНО:

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 {
...
...
...
]

Документы говорят, что это должен быть массив в ответ.Но консольный журнал показывает, что это объект.Данные в этом объекте в dataValues верны.Есть мои домены.Но я ожидаю получить массив для работы.

Как получить массив в ответ с async/await? Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Все, что вам нужно, это: raw : true,

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

По умолчанию запросы модели возвращают объект sequelize, чтобы получить простой результат, нам нужно передать raw : true

0 голосов
/ 04 декабря 2018

ожидание должно быть заключено в функцию с асинхронным ключом.

Правильный фрагмент кода будет выглядеть следующим образом:

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

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

Альтернативные подходы: 1) использование функций генератора 2) обещания.

По сути, это одно и то же, что делает ваш синхронный код асинхронным.

...