使用异步等待来抽象Hapi17路由

时间:2018-10-24 10:49:02

标签: javascript node.js async-await hapijs

我正在努力使自己转向Hapi 17中的等待/异步。

主要是我试图找出如何将抽象路由重写为将与async / await一起使用的路由

以下是我的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
        }

但是我假设Controller本身就是需要更改的东西。

1 个答案:

答案 0 :(得分:1)

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);
        }
    }
};

Here是一个完整的示例,您可以同时检查路由和控制器。