- 服务端开发的本质永远都是六个字
- 请求
- 处理
- 响应
-
CRUD案例
-
R:retrieve查询英雄
-
C:create增加英雄
-
U:update更新英雄/编辑
-
D:Delet删除英雄
-
1.搭建项目目录
- node_modules:存放第三方模块
- public:开放的公共资源
- images:图片资源
- views:html模板
- json:数据(暂时未学数据库,使用json代替)
- index.js:服务器入口
-
2.设计路由(确定接口文档)
- 确定一个项目中有哪些请求
- 请求的路径
- 请求的方法
- 请求的参数
-
3.显示首页英雄列表
- 客户端
- 浏览器请求网址
- 服务端
- (1)读取首页heroList.html模板
- (2)读取json文件数据
- (3)模板引擎渲染
- (4)返回已经渲染了数据的的html文本
- 客户端
-
4.显示添加英雄界面
- 改进渲染函数
- 第一个参数 html文件名没有:则返回报错信息 template not found
- 第二个参数 json文件名没有:则表示该html无需模板引擎,直接返回html模板文本
- 改进渲染函数
-
5.添加英雄
- 客户端:使用FromData来提交一个包含文件的表单数据
- 如果提交成功,则返回上一页并且刷新
- 如果提交失败,则弹窗显示报错原因
- 服务端
- 请求
- 使用formidable来接收文件数据
- 创建一个formidable对象
- 设置上传文件的路径
- 设置上传文件保留拓展名
- 开始解析请求
- 将随机生成的文件名(path属性)修改成上传的真实文件名(name)
- 使用formidable来接收文件数据
- 处理
- 将解析的数据对象添加到数据库(json文件)
- (1)先读取json文件得到json字符串
- (2)将json字符串转成json对象
- (3)根据请求参数创建英雄对象(id,name,gender,icon)
- (4)将英雄对象添加到json对象的数组
- (5)将json对象转成json字符串
- (6)将json字符串重新写入json文件
- 响应添加结果
- 请求
- 客户端:使用FromData来提交一个包含文件的表单数据
-
6.查看英雄详情
- 客户端
- 请求时get传参(英雄的id)
- 服务端
- (1)通过url模块获取参数id
- url.parse()
- (2)通过id查询英雄
- model模块封装了一个fetchHeroByID(id,callback)
- (3)将查询到的英雄渲染到heroInfo模板
- 拓展render模块,使其可以直接渲染对象
- (4)响应返回渲染好的模板
- (1)通过url模块获取参数id
- 客户端
-
7.进入编辑界面
- 客户端
- 请求时get传参(英雄的id)
- 服务端
- (1)通过url模块获取参数id
- url.parse()
- (2)通过id查询英雄
- (3)将查询到的英雄渲染到heroInfo模板
- (4)响应返回渲染好的模板
- (1)通过url模块获取参数id
- 客户端
-
MVC
- MVC的本质就是确定每一个对象(万物皆对象)的职责分工
- MVC的好处:便于维护,架构清晰
-
1.index.js
- 服务端唯一的入口文件
- 服务器由它创建
-
2.router.js
- 作用:根据不同的请求分发给不同的控制器
- 原因:因为服务器入口只有一个方法,如果所有的请求都写在入口就会造成代码的冗余,但是路由可以有多个
-
3.Controller.js
- 作用:1.负责业务处理,负责响应客户端 2.负责视图html及数据model之间的沟通协调(将数据放入到模板中)
-
4.Views
- 作用:负责html模板(展示界面)
-
5.Model
- 作用:负责数据的维护(增删改查)
- 需要与数据库打交道
- 作用:负责数据的维护(增删改查)
-
6.public
- 负责静态资源
-
7.lib
- 工具类:协助controller