Hapijs Hapi.js应用程序体系结构
我一直在开发一个hapi.js应用程序,具有以下体系结构:Hapijs Hapi.js应用程序体系结构,hapijs,Hapijs,我一直在开发一个hapi.js应用程序,具有以下体系结构: Database --Models --usermodel.js --anothermodel.js Routes --private --controllers --ctrl1.js --ctrl2.js --validators --validatr1.js --validtr2.js --public --controllers
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
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
我们在使用express
时采用了这种结构,但我从一个新的应用程序开始,想知道是否有资源可以找到更好的应用程序结构?我在官方网站上查找了hapi和其他资源,但没有找到任何有趣的内容
谢谢你的帮助。谢谢。hapi的好处在于它不会规定你应该如何构造你的应用程序。这取决于你,因为在你的生活中任何有意义的事情。你可以把你所有的东西都放在一个
index.js
文件中,并且仍然使用所有的hapi特性,但是你以后可能很难阅读/维护这个毛球
如果您以前使用过的上述结构对您的应用程序仍然有意义,那么绝对没有什么可以阻止您使用相同或类似的结构
型号
-只是与数据库通信的非hapi特定节点模块
exports.getUser = function (id, callback) {
Db.get('users', id, callback)
};
控制器
-
导出路由处理程序的模块
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);
});
}
验证程序
-导出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();
插件
您可能应该利用它们,它们允许您将应用程序拆分为逻辑块。您仍然可以使用上述结构,但可以将其放入插件中。如果以后添加的新功能与其他插件无关(分析、存储等),则可以将它们放入另一个插件中。这使您可以构建一个微服务体系结构,在该体系结构中,只需扩展应用程序中需要扩展的特定部分即可轻松实现
其他人在做什么?
如果你只是因为你能改变它,那么看看一些已经用hapi构建的项目,看看他们是如何做到的:
- NPM网站:
- PostFile应用程序(过期的hapi版本):
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
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
通常,他们将所有源代码放在de
/lib
文件夹中。这里有一个他们用于研讨会的示例应用程序,你也可以在什么意义上使用yeoman生成器“更好”?在某种意义上,它允许利用hapi.js功能。上面的结构深受express中间件的启发,我曾将它们创建为处理每个请求的层(验证器、控制器、清理等)。