Expressjs MVC не удается получить listAll () для возврата данных из mon goose в маршрутизаторе - PullRequest
0 голосов

Я пытаюсь реализовать архитектуру MVC (i sh) для очень конкретного c варианта использования в expressjs. Я думаю, что у меня есть проблема с обещанием, но я все еще не могу правильно отладить проблему здесь.

Итак, об архитектуре: вызовы маршрутизатора будут запускать функции, которые на самом деле являются методами классов на уровне обслуживания. , например: router.get ('/ users / list') -triggers-> userService.listAll () -returns массив users-> res.render ('apage', {users: users}); (пользователи - это переменная, содержащая возвращаемые значения) ..

Хотя userService может получить доступ к источнику данных и вернуть данные, на переменную "users" внутри маршрутизатора ничего не влияет.

Фактический код: users. js

router.get('/dashboard',  function(req, res) {
    var users= userService.listAll();
    res.render('dashboard.twig', {users: users});
});

UserService. js

async listAll(){

        await utilisateurModel.find({}).then(
            function(data){
            console.log("data is:"+JSON.stringify(data));
            return data;

     });
    }

Есть идеи, как это исправить?

1 Ответ

1 голос
/ 06 марта 2020

Вы получаете много ошибок в Promise, и async/await.

listAll - это асинхронная функция c, вам нужно использовать ключевое слово await, чтобы "получить" значение.

UserService. js

async listAll() {
  const data = await utilisateurModel.find({});
  console.log("data is:" + JSON.stringify(data));
  return data;
}

пользователей. js

router.get('/dashboard', async function (req, res) { // async function
  var users = await userService.listAll(); // await keyword
  res.render('dashboard.twig', { users: users });
});
...