编辑推荐

  和众多老牌的Node框架相比,hapi是后起之秀,然而它成功地构建了自己的生态圈。PayPal、Yahoo!、Mozilla和Disney等公司都使用hapi构建了自己的Web应用,其影响力可见一斑。模块化、以配置为中心和插件化是hapi*大的亮点。它的核心仅由少数几个模块构成,其他功能均通过插件扩展来实现,在丰富的功能和无限制的可定制性之间取得了完美平衡。更令人兴奋的是,hapi经历了沃尔玛在黑色星期五期间史上*大规模的Node部署,可以说已经在生产环境中经历了千锤百炼。
  《hapi.js 实战/Web开发经典丛书》是一本介绍hapi的入门书籍,由浅入深地全面介绍hapi的设计思想与核心功能,并呈现丰富的案例。希望你能从中受益,并享受使用hapi带来的快乐,这也是框架名称的由来。
  书主要特色
  ·Node应用设计的较佳实践
  ·维护Hapi构建API
  ·维护和扩展应用
  ·使用插件扩展Hapi
  在学习《hapi.js 实战/Web开发经典丛书》之前,读者应熟练掌握JavaScript技能。具有Node.js经验有助于学习《hapi.js 实战/Web开发经典丛书》,但不是必需的。

内容简介

  hapi.js是围绕三个基本理念构建的Node.js开发框架。一是开发效率,hapi简明的设置允许快速构建和运行应用;二是可维护性,hapi的模块化设计方便了扩展和改进;三是灵活性,可用插件来扩展和自定义hapi的轻量级内核。
  《hapi.js实战一书紧贴实用,指导你使用Node.js和hapi.js框架来构建API、服务器和应用。开篇呈现一个通俗易懂的Node.jsWeb应用模型,从中可清晰了解hapi所扮演的角色。此后讲解构建API并将其集成到Web应用的完整过程,将穿插介绍验证、测试、身份验证和部署等重要主题。*后讨论如何构建性能卓越、安全可靠的应用。
  主要特色
  ◆Node应用设计的*佳实践
  ◆使用hapi构建API
  ◆维护和扩展应用
  ◆使用插件扩展hapi
  在学习《hapi.js 实战/Web开发经典丛书》前,读者应熟练掌握JavaScript技能。具有Node.js经验有助于学习《hapi.js 实战/Web开发经典丛书》,但不是必需的。

目录

第I部分入门
第1章hapi简介3
1.1hapi是什么4
1.1.1hapi的特色6
1.1.2hapi是哪类框架8
1.2hapi的组成部分11
1.2.1服务器13
1.2.2连接13
1.2.3路由13
1.2.4handler13
1.2.5插件13
1.3何时应该(不该)使用hapi14
1.3.1何时应该使用hapi14
1.3.2何时不应该使用hapi15
1.4hapi的运作方式15
1.4.1安装hapi15
1.4.2创建服务器16
1.4.3添加路由16
1.4.4注册插件17
1.4.5运行hapi18
1.5获得帮助18
1.5.1hapi.js网站19
1.5.2MakeMehapi19
1.5.3GitHub19
1.5.4IRC19
1.5.5StackOverflow20
目录
1.5.6阅读代码20
1.6小结20
第2章构建API21
2.1设计API21
2.1.1你应该接受这个任务21
2.1.2收集需求22
2.1.3设计API接口22
2.2准备工作23
2.2.1工作目录23
2.2.2准备数据库和样本数据23
2.2.3sqlite3node模块24
2.3获取和搜索食谱25
2.3.1server.route()介绍25
2.3.2路由handler26
2.3.3接口A:获取所有食谱28
2.3.4接口A:搜索食谱30
2.3.5接口B:获取单一食谱31
2.4编写可维护的代码32
2.4.1模块化路由32
2.4.2用好server.bind():设置
handler中的上下文33
2.4.3模块化handler35
2.5身份验证37
2.5.1模式和策略37
2.5.2实现不记名token身份验证38
2.5.3使用用户凭据40
XVIhapi.js实战
2.6食谱创建和标星40
2.6.1测试接口40
2.6.2接口C:创建食谱41
2.7小结44
第3章构建网站45
3.1DinDin网站45
3.1.1网站的样子45
3.1.2网站是如何运作的47
3.1.3设置47
3.2网页和静态内容服务49
3.2.1静态文件服务49
3.2.2整个目录服务51
3.2.3server.views():使用Handlebars
动态渲染视图53
3.2.4DRY视图:布局和片段57
3.3使用外部API60
3.3.1使用Wreck:调用API60
3.3.2动态主页62
3.3.3食谱详情页62
3.3.4视图helper65
3.4管理登录和用户会话67
3.4.1hapi-auth-cookie插件67
3.4.2表单69
3.4.3实现登录71
3.4.4创建食谱75
3.4.5实现注销78
3.5小结79
第II部分扩展工具箱
第4章深入理解路由和handler83
4.1深入理解路由83
4.1.1hapi的路由:路由的排序和
冲突处理83
4.1.2路由方法84
4.1.3参数化路径85
4.1.4hapi如何选取路由88
4.2构建自定义handler90
4.2.1国际化例子91
4.2.2解析Accept-Language
header92
4.2.3第一个实现93
4.2.4再次简化94
4.3服务器方法96
4.4路由先决条件99
4.4.1异步JavaScript的并发问题99
4.4.2指定路由先决条件101
4.4.3使用带有先决条件的服务器
方法102
4.4.4多重串行先决条件103
4.4.5并发先决条件:并行地运行
任务105
4.5管理文件上传107
4.5.1使用数据输出:把文件内容
读入内存108
4.5.2使用流输出:以流的方式获取
文件109
4.5.3使用文件输出:把文件存储到
磁盘110
4.5.4额外的payload设置111
4.4小结111
第5章理解请求和响应113
5.1request对象和生命周期113
5.1.1什么是request对象113
5.1.2请求的生命周期115
5.1.3扩展点118
5.1.4应该使用哪个扩展点?121
5.2reply接口和response对象121
5.2.1什么是reply接口?121
5.2.2reply()的有效参数123
XVII
目录
5.2.3response对象124
5.2.4使用流来响应126
5.3处理错误128
5.3.1程序员错误和操作错误129
5.3.2HTTP状态码129
5.3.3介绍Boom:创建HTTP
友好的错误131
5.3.4网站友好的HTML错误
页面132
5.4小结136
第6章使用Joi验证139
6.1介绍Joi140
6.1.1Joi的工作方式140
6.1.2一个简单例子:验证标量
类型141
6.1.3一个更复杂的例子:验证一个
复合类型142
6.2掌握Joi144
6.2.1了解API145
6.2.2Joi.assert()和Joi.validate()146
6.2.3Joi中的类型转换146
6.2.4abortEarly选项147
6.2.5探索Joi错误148
6.3hapi中的验证150
6.3.1使用Joi进行输入验证150
6.3.2验证payload152
6.3.3验证响应155
6.3.4使用failAction自定义验证
响应156
6.4整合:使用hapi和Joi进行Web
表单验证157
6.4.1如何工作158
6.4.2创建骨架159
6.4.3创建路由和视图160
6.4.4添加验证163
6.4.5在表单中渲染错误165
6.4.6表单提交成功后的重定向167
6.5小结168
第7章使用插件构建模块化应用169
7.1插件思想169
7.1.1插件的定义171
7.1.2插件的作用172
7.1.3把所有东西放进插件174
7.1.4Pingoo应用174
7.2创建和加载插件176
7.2.1创建插件176
7.2.2使用server.register()加载
插件179
7.2.3插件依赖180
7.2.4使用选项配置插件182
7.3使用Glue组合插件186
7.3.1什么是Glue?186
7.3.2创建一个清单187
7.3.3使用Confidence工具实现智
能配置190
7.4插件通信193
7.4.1全局的服务器配置193
7.4.2通过server.expose()在插件中
对外公开属性195
7.4.3使用事件系统196
7.5小结200
第8章充分利用缓存201
8.1客户端缓存202
8.1.1手动设置header203
8.1.2在配置中设置缓存策略203
8.1.3重新验证和ETag204
8.2介绍Catbox:一个多策略的对象
缓存库207
8.2.1什么是Catbox208
XVIIIhapi.js实战
8.2.2Catbox客户端和策略211
8.2.3Staleness213
8.2.4应该用哪个缓存策略?215
8.3hapi应用中的服务器端缓存216
8.3.1配置客户端216
8.3.2使用server.cache()创建并使用
Catbox策略217
8.3.3缓存服务器方法219
8.3.4使用键、分区和段来组织缓存
数据220
8.4小结222
第Ⅲ部分创建健壮的应用
第9章身份验证和安全225
9.1关于身份验证的深度探讨225
9.1.1hapi身份验证概述226
9.1.2应该选择哪种身份验证
模式228
9.1.3身份验证的scope228
9.1.4身份验证模式229
9.2通过Bell实现第三方身份
验证231
9.2.1什么是第三方身份验证231
9.2.2Bell简介232
9.2.3将Bell整合进hapi应用233
9.3通过CORS管理跨域请求240
9.3.1允许来自任何地方的跨域
请求241
9.3.2只接受指定源的访问243
9.3.3处理自定义的header244
9.3.4CORS和凭据(Cookie)246
9.3.5CORS设置的粒度247
9.4使用Crumb保护应用免受CSRF
攻击248
9.4.1通过CSRF令牌对抗CSRF
攻击249
9.4.2通过创建自己的漏洞来理解
CSRF250
9.4.3通过Crumb保护HTML253
9.4.4使用Crumb保护restful
API254
9.5安全相关的header255
9.6小结257
第10章使用Lab、Code和server.inject()
进行测试259
10.1Lab简介259
10.1.1第一个测试260
10.1.2Lab作为本地依赖261
10.1.3通过experiments组织
测试262
10.1.4默认异步执行263
10.1.5Lab的语法糖264
10.2用Code断言库制作断言265
10.2.1什么是Code断言库265
10.2.2Code的语法:断言语句的
结构267
10.3使用server.inject()测试hapi
服务269
10.3.1为测试准备server270
10.3.2server.inject()的响应
参数272
10.3.3使用requestpayload进行
测试272
10.3.4测试需要验证的路由274
10.4Lab进阶276
10.4.1reporter276
10.4.2代码覆盖率278
10.4.3linting278
10.4.4全局变量泄露279
目录XIX
10.4.5并行执行测试279
10.5使用stub、spies和monkey-patching
测试难以测试的代码281
10.5.1monkey-patching介绍281
10.5.2使用Sinon的Spy和stub284
10.5.3使用proxyquire286
10.6小结288
第11章投入生产环境及更多相关
内容291
11.1hapi的日志记录和Good291
11.1.1hapi中的服务器事件291
11.1.2通过request.log()和
server.log()记录日志293
11.1.3通过Good记录线上日志和
处理监控296
11.1.4使用多种reporter实例297
11.2为路由生成文档298
11.2.1路由的tags、notes和
descriptions299
11.2.2通过Lout自动生成的
文档299
11.3监控302
11.3.1Graphite和StatsD302
11.3.2通过StatsD度量任何指标303
11.3.3使用Oppsy获取hapi的操作
数据304
11.4调试307
11.4.1不要认为使用console.log()
不好307
11.4.2Nodedebug307
11.4.3NodeInspector309
11.4.4通过Poop进行Core
dumps310
11.4.5使用hapiTV调试实时
请求312
11.5部署支持SSL/TLS的应用314
11.5.1TLS的配置项314
11.5.2在hapi中配置TLS连接315
11.5.3使用self-signed凭据测试
SSL315
11.5.4强制HTTPS317
11.6小结319
附录ANode.js和npm入门321
附录B《hapi.js 实战/Web开发经典丛书》用到的npm包327

其他推荐