Hapi.js应用程序架构

I_D*_*ing 14 hapijs

我一直在研究hapi.js应用程序并具有以下架构:

Database
  --Models
    --usermodel.js
    --anothermodel.js
Routes
  --private
    --controllers
      --ctrl1.js
      --ctrl2.js
    --validators
      --validatr1.js
      --validtr2.js
  --public
    --controllers
      --ctrl1.js
      --ctrl2.js
test
  --dbtest.js
  --functiontest.js
server.js
Run Code Online (Sandbox Code Playgroud)

我们在使用时采用了这种结构express,但我从一个新的应用程序开始,并想知道是否有资源可以找到更好的应用程序结构?我已经查看了关于hapi和其他资源的官方网站,但找不到任何有趣的内容.

任何帮助赞赏.谢谢.

Mat*_*son 7

关于hapi的好处是,它并没有决定你应该如何构建你的应用程序.这取决于你,因为你的生活中有任何意义.你可以将你拥有的所有内容都放在一个index.js文件中并仍然使用所有hapi功能,但是你可能会很难在以后阅读/维护该毛球.

如果您之前使用的上述结构仍然对您的应用程序有意义,那么绝对没有什么能阻止您使用相同或类似的结构.

models - 只是与您的数据库通信的非hapi特定节点模块

exports.getUser = function (id, callback) { 

    Db.get('users', id, callback) 
};
Run Code Online (Sandbox Code Playgroud)

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);
    });
}
Run Code Online (Sandbox Code Playgroud)

validators - 导出joi模式的模块

exports.showUserPage = {
    params: {
        id: Joi.number().required()
    }
} 
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

插件

您应该利用插件,它们允许您将应用程序拆分为逻辑块.您仍然可以使用上述结构,但将其放在插件中.您之后添加的新功能可以进入另一个插件,如果它们不相关(分析,存储等).这使您可以构建一个微服务架构,只需扩展需要扩展的应用程序的特定部分.

其他人在做什么?

如果你想改变它只是因为你可以,看看已经用hapi构建的几个项目,看看它们是如何做到的: