Ответ 1
Хорошая вещь о хапи заключается в том, что она не диктует вам, как вы должны структурировать свои приложения. Это зависит от вас, что имеет смысл в вашей жизни. Вы можете бросить все, что у вас есть, в одном файле index.js
и все еще использовать все функции hapi, но вам, вероятно, нелегко будет читать/поддерживать этот hairball позже.
Если эта структура выше, которую вы использовали ранее, все еще имеет смысл для вашего приложения, абсолютно ничего не мешает вам использовать ту же или подобную структуру.
models
- только не-hapi конкретные node модули, которые говорят с вашим db
exports.getUser = function (id, callback) {
Db.get('users', id, callback)
};
controllers
-
модули, которые экспортируют обработчики маршрута
var User = require('../models/user');
exports.showUserPage = function (request, reply) {
User.getUser(request.params.id, function (err, user) {
if (err) {
throw err;
}
if (!user) {
return reply('User not found').code(404)
}
reply.view('user', user);
});
}
validators
- модули, которые экспортируют схемы joi
exports.showUserPage = {
params: {
id: Joi.number().required()
}
}
server.js
- где вы склеиваете все это вместе
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 7843 });
server.route({
method: 'GET',
path: '/users/{id}',
handler: require('./controller/users').showUserPage,
config: {
validate: require('./validators/users').showUserPage
}
});
server.start();
Плагины
Вероятно, вам следует воспользоваться plugins, они позволяют разделить приложение на логические фрагменты. Вы все еще можете использовать указанную выше структуру, но поместите ее внутри плагина. Новые функции, которые вы добавите позже, могут попасть в другой плагин, если они не связаны (аналитика, хранилище и т.д.). Это позволяет создавать архитектуру микросервиса, где легко масштабировать только те части приложений, которые нуждаются в масштабировании.
Что делают другие люди?
Если вы хотите изменить его только потому, что можете, взгляните на несколько проектов, уже построенных с помощью hapi, и посмотрите, как они это делают:
- Сайт НПМ: https://github.com/npm/newww
- Postmile App (устаревшая версия hapi):