我一直在研究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和其他资源的官方网站,但找不到任何有趣的内容.
任何帮助赞赏.谢谢.
关于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构建的几个项目,看看它们是如何做到的: