Ali*_*iba 127 frameworks node.js express hapijs
从Web应用程序的设计和开发的角度来看,Express和Hapi如何相互比较?对于基本示例,它们看起来很相似,但是我有兴趣了解有关整体应用程序结构的主要差异.
例如,据我所知,Hapi使用不同的路由机制,不考虑注册顺序,可以做更快的查找,但与Express相比是有限的.还有其他重要的区别吗?
还有一篇关于选择Hapi(over Express)开发新npmjs.com网站的文章,本文指出"Hapi的插件系统意味着我们可以通过允许微服务的方式隔离应用程序的不同方面和服务.另一方面,Express需要更多的配置来获得相同的功能",这究竟意味着什么?
Mat*_*son 219
这是一个很大的问题,需要很长的答案才能完成,所以我只会解决一些最重要的差异.抱歉,这仍然是一个冗长的答案.
当你说:你是完全正确的时候:
对于基本的例子,他们似乎相似
这两个框架都在解决相同的基本问题:为节点中的HTTP服务器构建提供方便的API.也就是说,比http单独使用较低级别的本机模块更方便.该http模块可以完成我们想要的一切,但编写应用程序非常繁琐.
为实现这一目标,他们都使用了高级Web框架中长期存在的概念:路由,处理程序,插件,身份验证模块.它们可能并不总是具有相同的名称,但它们大致相同.
大多数基本示例看起来像这样:
表达:
app.get('/', function (req, res) {
getSomeValue(function (obj) {
res.json({an: 'object'});
});
});
Run Code Online (Sandbox Code Playgroud)
高致病性禽流感:
server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {
getSomeValue(function (obj) {
reply(obj);
});
}
});
Run Code Online (Sandbox Code Playgroud)
这里的差异并不完全是开创性的吗?那么为什么选择一个呢?
简单的答案是hapi更多,它开箱即用的功能更多.当你只看上面的简单例子时,这可能不太清楚.事实上,这是故意的.简单的案例很简单.那么让我们来看看一些重大差异:
Express旨在非常小.通过为您提供一个只有轻薄粉尘的小型API http,您在添加其他功能方面仍然非常自负.如果要读取传入请求的正文(非常常见的任务),则需要安装单独的模块.如果您期望将各种内容类型发送到该路由,您还需要检查Content-type标头以检查它是什么并相应地解析它(例如,表单数据与JSON对比多部分),通常使用单独的模块.
hapi具有丰富的功能集,通常通过配置选项公开,而不需要编写代码.例如,如果我们想确保在运行处理程序之前将请求主体(有效负载)完全读入内存并进行适当的解析(自动基于内容类型),这只是一个简单的选项:
server.route({
config: {
payload: {
output: 'data',
parse: true
}
},
method: 'GET',
path: '/',
handler: function (request, reply) {
reply(request.payload);
}
});
Run Code Online (Sandbox Code Playgroud)
您只需要比较两个项目的API文档,看看hapi提供了更大的功能集.
hapi包含Express内置的一些内置功能(据我所知):
hapi和Express以完全不同的方式实现可扩展性.使用Express,您可以使用中间件功能.中间件函数有点类似于过滤器,在命中处理程序之前,所有请求都会通过它们运行.
hapi具有请求生命周期并提供扩展点,这些扩展点可与中间件功能相媲美,但在请求生命周期中存在多个已定义的点.
沃尔玛构建hapi并停止使用Express的原因之一是将Express应用程序拆分为单独的部分并让不同的团队成员安全地在他们的块上工作是一件令人沮丧的事情.出于这个原因,他们用hapi 创建了插件系统.
插件就像一个子应用程序,您可以在hapi应用程序中执行所有操作,添加路由,扩展点等.在插件中,您可以确定您没有破坏应用程序的其他部分,因为顺序路由注册无关紧要,您无法创建冲突路由.然后,您可以将此插件组合到服务器中并进行部署.
因为Express让您开箱即用,所以当您需要向项目添加任何内容时,您需要向外看.在使用hapi时,很多时候,您需要的功能是内置的,或者是核心团队创建的模块.
最小的声音很棒.但是,如果你正在构建一个严肃的生产应用程序,那么你最终可能需要所有这些东西.
hapi是由沃尔玛的团队设计的,用于运行黑色星期五的交通,因此安全性和稳定性始终是最受关注的问题.因此,框架会执行许多额外操作,例如限制传入的有效负载大小以防止耗尽进程内存.它还具有最大事件循环延迟,使用的最大RSS内存和v8堆的最大大小等选项,超过这些选项,服务器将以503超时响应,而不是仅仅崩溃.
自己评估它们.考虑一下您的需求以及两者中的哪一个解决了您最关心的问题.在两个社区(IRC,Gitter,Github)畅游,看看你喜欢哪个.不要只听我的话.而且快乐的黑客!
免责声明:我作为一本关于hapi的书的作者有偏见,而上述内容主要是我个人的观点.
wle*_*300 50
我的组织正在和Hapi一起去.这就是我们喜欢它的原因.
哈皮是:
如果你想直接听到Eran Hammer(Hapi的领导)
在过去四年中,hapi逐渐成为许多项目的首选框架,无论大小.hapi的独特之处在于它能够扩展到大型部署和大型团队.随着项目的发展,其复杂性也在增加 - 工程复杂性和流程复杂性.hapi的架构和哲学处理增加的复杂性,而无需不断重构代码[更多内容]
Hapi入门并不像ExpressJs那么容易,因为Hapi没有相同的"明星力量"......但是一旦你感到舒服,你就会获得很多里程.作为一个不负责任地使用ExpressJs几年的新黑客,我花了大约2个月的时间.如果你是一个经验丰富的后端开发人员,你会知道如何阅读文档,你可能甚至都不会注意到这一点.
Hapi文档可以改进的领域:
我认为身份验证将是最具挑战性的部分,因为您必须决定使用什么样的身份验证策略(基本身份验证,Cookie,JWT令牌,OAuth).虽然技术上不是Hapi的问题,会话/身份验证环境如此分散......但我确实希望他们为此提供了一些手握.这将大大提高开发者的幸福感.
剩下的两个实际上并不那么困难,文档可以写得稍好一些.
| 归档时间: |
|
| 查看次数: |
36548 次 |
| 最近记录: |