/NodeJS_MVC_heros

简单增删改查

Primary LanguageJavaScript

  • 服务端开发的本质永远都是六个字
    • 请求
    • 处理
    • 响应

1.分析需求

  • CRUD案例

  • R:retrieve查询英雄

  • C:create增加英雄

  • U:update更新英雄/编辑

  • D:Delet删除英雄

2.开发思路分析

  • 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)
      • 处理
        • 将解析的数据对象添加到数据库(json文件)
        • (1)先读取json文件得到json字符串
        • (2)将json字符串转成json对象
        • (3)根据请求参数创建英雄对象(id,name,gender,icon)
        • (4)将英雄对象添加到json对象的数组
        • (5)将json对象转成json字符串
        • (6)将json字符串重新写入json文件
      • 响应添加结果
  • 6.查看英雄详情

    • 客户端
      • 请求时get传参(英雄的id)
    • 服务端
      • (1)通过url模块获取参数id
        • url.parse()
      • (2)通过id查询英雄
        • model模块封装了一个fetchHeroByID(id,callback)
      • (3)将查询到的英雄渲染到heroInfo模板
        • 拓展render模块,使其可以直接渲染对象
      • (4)响应返回渲染好的模板
  • 7.进入编辑界面

    • 客户端
      • 请求时get传参(英雄的id)
    • 服务端
      • (1)通过url模块获取参数id
        • url.parse()
      • (2)通过id查询英雄
      • (3)将查询到的英雄渲染到heroInfo模板
      • (4)响应返回渲染好的模板

nodejs服务端整体目录架构

  • 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