我一直在研究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
我们在使用express
时采用了这种结构,但我从一个新的应用程序开始,并想知道是否有资源可以找到更好的应用程序结构?我已经查看了关于hapi和其他资源的官方网站,但无法找到任何有趣的内容。
任何帮助表示赞赏。感谢。
答案 0 :(得分:7)
关于hapi的好处是,它并没有决定你应该如何构建你的应用程序。它取决于你,因为你生命中有意义的东西。您可以将所有内容放在一个index.js
文件中,而仍然使用所有hapi功能,但您可能会遇到困难以后阅读/维护那个毛球。
如果您之前使用的上述结构仍然对您的应用程序有意义,那么绝对没有什么能阻止您使用相同或类似的结构。
models
- 只与您的数据库通信的非hapi特定节点模块
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构建的一些项目,并了解他们是如何进行的:
答案 1 :(得分:3)
我一直在构建chat application,以下是我使用的内容:
模块化的灵感来自我在几个地方读过的Angular风格指南,重点是按实体分组模块而不是功能。
以下是我的项目架构:
auth
-- index.js
-- package.json
modules
--user
--controller.js
--validator.js
--index.js
--group
--controller.js
--validator.js
--index.js
--index.js
--package.json
database
--models
--user.js
--group.js
--index.js
--package.json
bootstrap
--users.js
--groups.js
--index.js
--package.json
test
--user
--model.js
--route.js
--index.js
--index.js
--package.json
app.js