第1章 引言 1
1.1 MERN是什么 1
1.2本书的目标读者 3
1.3本书组织结构 3
1.4格式约定 5
1.5读者须知 7
1.6 MERN的组件 8
1.6.1 React 8
1.6.2 Node.js 11
1.6.3 Express 14
1.6.4 MongoDB 15
1.6.5工具与库 17
1.7为何使用MERN技术栈 19
1.7.1清一色的JavaScript语言 19
1.7.2清一色的JSON数据格式 20
1.7.3 Node .js的性能 20
1.7.4 npm生态系统 21
1.7.5同构性 21
1.7.6它不是一个框架 22
1.8小结 22
第2章Hello World 23
2.1脱离服务器的Hello World 23
2.2服务器搭建 27
2.2.1 nvm 27
2.2.2 Node .js 28
2.2.3项目 29
2.2.4 npm 30
2.2.5 Express 32
2.3构建阶段的JSX编译 34
2.3.1分离脚本文件 35
2.3.2转换 36
2.3.3自动化 38
2.3.4React库 39
2.4 ES2015 39
2.5小结 43
2.6习题答案 43
2.6.1习题:JSX 43
2.6.2习题:npm 44
2.6.3习题:Express 44
2.6.4习题:babel 45
2.6.5习题:ES2015 45
第3章React组件 47
3.1 Issue Tracker(问题追踪) 47
3.2 React类 49
3.3组件组装 51
3.4传递数据 53
3.4.1使用属性 53
3.4.2属性校验 56
3.4.3使用Children 57
3.5动态组装 59
3.6小结 64
3.7习题答案 64
3.7.1习题:React类 64
3.7.2习题:传递数据 64
3.7.3习题:动态组装 65
第4章React状态 67
4.1设置状态 67
4.2异步状态初始化 71
4.3事件处理 73
4.4从子组件到父组件的通信 74
4.5无状态组件 77
4.6设计组件 79
4.6.1状态与props 79
4.6.2组件层次结构 80
4.6.3通信 80
4.6.4无状态组件 80
4.7小结 81
4.8习题答案 81
4.8.1习题:设置状态 81
4.8.2习题:从子组件到父组件的通信 82
第5章Express REST APIs 83
5.1 REST 83
5.1.1基于资源 84
5.1.2使用HTTP Methods标识操作 84
5.1.3 JSON 87
5.2 Express 87
5.2.1路由 87
5.2.2处理程序函数 89
5.2.3中间件 91
5.3 List API 92
5.3.1服务器自动重启 94
5.3.2测试 95
5.4 Create API 97
5.5使用List API 100
5.6使用Create API 102
5.7错误处理 104
5.8小结 108
5.9习题答案 109
5.9.1习题:List API 109
5.9.2习题:Create API 110
5.9.3习题:使用 List API 111
5.9.4习题:使用Create API 111
5.9.5习题:错误处理 111
第6章 使用MongoDB 113
6.1 MongoDB基础 113
6.1.1文档 113
6.1.2集合 114
6.1.3查询语言 115
6.1.4安装 116
6.1.5 mongo shell 117
6.1.6 shell脚本 121
6.2架构初始化 122
6.3 MongoDB Node .js驱动程序 123
6.3.1回调 126
6.3.2 Promises 127
6.3.3 Generator和co模块 128
6.3.4 async模块 129
6.4从MongoDB读取数据 131
6.5向MongoDB写入数据 134
6.6小结 136
6.7习题答案 136
6.7.1习题:mongo shell 136
6.7.2习题:架构初始化 137
6.7.3习题:从MongoDB读取数据 137
6.7.4习题:向MongoDB写入数据 138
第7章 模块化与webpack 139
7.1服务器端模块 139
7.2 webpack简介 142
7.3手工使用webpack 143
7.4转换和打包 146
7.5库捆绑包 151
7.6模块热替换 155
7.7使用中间件实现HMR 158
7.8调试 161
7.9服务器端ES2015 163
7.10 ESLint 168
7.11小结 176
7.12习题答案 177
7.12.1习题:转换和打包 177
7.12.2习题:模块热替换 178
7.12.3习题:服务器端ES2015 178
7.12.4习题:ESLint 179
第8章 使用React Router进行路由 181
8.1路由技术 182
8.2简单的路由 183
8.3路由参数 185
8.4路由查询字符串 188
8.5使用程序进行导航 193
8.6嵌套的路由 196
8.7浏览器历史 200
8.8小结 202
8.9习题答案 202
8.9.1习题:路由参数 202
8.9.2习题:路由查询字符串 203
8.9.3习题:使用程序进行导航 204
第9章 表单 205
9.1 List API中的更多过滤功能 205
9.2过滤表单 207
9.3 Get API 214
9.4 Edit页面 216
9.5 UI组件 220
9.5.1数字输入框 221
9.5.2 Date输入框 226
9.6 Update API 232
9.7使用Update API 236
9.8 Delete API 238
9.9使用Delete API 239
9.10小结 242
9.11习题答案 242
9.11.1习题:在List API中添加更多过滤条件 242
9.11.2习题:过滤表单 242
9.11.3习题:Edit页面 243
9.11.4习题:Date输入框 243
9.11.5习题:Update API 244
第10章React-Bootstrap 245
10.1安装Bootstrap 246
10.2导航 249
10.3表格和面板 256
10.4表单 258
10.4.1基于栅格的表单 259
10.4.2内联表单 263
10.4.3横向表单 265
10.5提示 270
10.5.1验证消息 270
10.5.2结果消息 272
10.6模态对话框 279
10.7小结 284
10.8习题答案 285
10.8.1习题:导航 285
10.8.2习题:基于栅格的表单 285
10.8.3习题:内联表单 286
10.8.4习题:模态对话框 286
第11章 服务器端渲染 287
11.1基本的服务器端渲染 288
11.2处理state 293
11.3初始state 296
11.4服务器端bundle 298
11.5后端HMR 301
11.6配合路由功能的服务器端渲染 306
11.7封装Fetch操作 314
11.8小结 319
11.9习题答案 320
11.9.1习题:后端HMR 320
11.9.2习题:配合路由功能的服务器端渲染 320
第12章 高级特性 321
12.1 MongoDB聚合 321
12.2分页 331
12.3高阶组件(Higher Order Components) 336
12.4搜索栏 345
12.5 Google账号登录 351
12.6会话处理 359
12.7小结 367
第13章 展望 369
13.1 Mongoose 370
13.2 Flux 371
13.3部署 373
13.4 mern.io 375
13.5同学们,下课 377