Как работать с Async / Await в expressjs роутере? - PullRequest
0 голосов
/ 10 февраля 2020

Я боролся с проблемой, касающейся Async / Await, я относительно новичок в Nodejs. У меня есть репозиторий, где я подключаюсь напрямую к своей коллекции mongodb, чтобы извлечь из нее некоторые данные, но когда я подключаю свой контроллер к этому репозиторию, я получаю нулевой ответ. Пожалуйста, проверьте мой код ниже: -

SyncRepository. js

const mongoose = require('mongoose');

exports.ItemRepo = async (limit) => {
  try {
     await mongoose.connection.db.collection('items_1087342')
        .find({}, {timeout: false}).limit(limit).toArray((err, results) => {
            // results.forEach(e => {
            //     console.log(e.item_id);
            // }); //This works well
            return results;
        });
 } catch (e) {
    throw Error('Error Loading Data:- ' + e.message);
 }
};

SyncController. js

const syncRepo = require('../../../Repositories/Sync/SyncRepository');

exports.getItem = async (req, res) => {
  try {
     await syncRepo.ItemRepo(7)
        .then(element => {
            console.log(element);
           return res.json(element); //This return null
        });
    // return await res.json(await syncRepo.ItemRepo(7));
 } catch (e) {
    return res.status(400).json({ status: 400, message: e.message });
 }
};

1 Ответ

5 голосов
/ 10 февраля 2020

Вы смешиваете async/await и традиционный синтаксис Promise. Попробуйте это:

SyncRepository. js

const mongoose = require('mongoose');

exports.ItemRepo = limit => {
     return mongoose.connection.db.collection('items_1087342')
        .find({}, {timeout: false})
        .limit(limit)
        .exec() // see @Enslev's explanation in the comments
};

SyncController. js

const syncRepo = require('../../../Repositories/Sync/SyncRepository');

exports.getItem = async (req, res) => {
  try {
     let element = await syncRepo.ItemRepo(7)
     return res.json(element);
 } catch (e) {
    return res.status(400).json({ status: 400, message: e.message });
 }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...