【问题标题】:Abstracting Hapi17 routes using async await使用异步等待抽象 Hapi17 路由
【发布时间】:2018-10-25 16:46:11
【问题描述】:

我正在努力解决在 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
        }

但我假设控制器本身是需要更改的。

【问题讨论】:

    标签: javascript node.js async-await hapijs


    【解决方案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 是一个完整的示例,您可以分别检查路由和控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-10
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      相关资源
      最近更新 更多