Абстрагирование маршрутов Hapi17 с использованием асинхронного ожидания - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь сосредоточиться на переходе к ожиданию / асинхронности в Хапи 17.

В основном я пытаюсь выяснить, как переписать абстрактный маршрут на маршрут, который будет работать с асинхронным / ожиданием

Ниже приводится выдержка из моего routes\dogs.js файла

const DogController = require('../controllers/dog')
exports.plugin = {
  name: 'dogs',
  register: async (server, options) => {
    server.route({
      method: 'GET',
      path: '/api/dogs',
      handler: DogController.list
    })

с соответствующей выдержкой из ../controllers/dog

exports.list = (req, h) => {
  return Dog.find({}).exec().then((dog) => {
    return { dogs: dog }
  }).catch((err) => {
    return { err: err }
  })
}

, которая в настоящее время возвращает список собак избаза данных MongoDB на данный момент.Я хотел бы переписать маршрут так, чтобы обработчик стал чем-то вроде

handler: async (request, h) => {
          return DogController.list
        }

Но я предполагаю, что сам контроллер - это то, что нужно изменить.

1 Ответ

0 голосов
/ 25 октября 2018

В Route есть свойство options , которое позволяет изменить поведение Route в жизненном цикле запроса.Это означает, что вы можете создать объект и привязать его к определению вашего маршрута.

Вот ваш плагин маршрута dogs.js.

exports.plugin = {
    async register(server, options) {
        const DogController = require('../controllers/dogs');
        server.route([
            {
                method: 'GET',
                path: '/dogs',
                options: DogController.view
            },                
        ]);
    },
    name: 'dogs-route'
};

А вот и ваш контроллер собаки.

exports.view = {
    description: 'list all the good dogs',
    handler: async (request, h) => {
        return h.view('index', {'title': 'Home Page Title'});
        try {
            const dogs = await Dog.find({}).exec();
            return {dogs};
        }
        catch(e){
            // or something you want
            return Boom.badRequest(e.message, e);
        }
    }
};

Здесь - полный пример того, что вы можете проверить и маршруты, и контроллеры соответственно.

...