我正在努力使自己转向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本身就是需要更改的东西。
答案 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是一个完整的示例,您可以同时检查路由和控制器。