这篇文档主要介绍了利用express实现增删改查的效果,主要学习开发过程中的模块化处理。

1. 起步

  • 初始化
  • 模块化处理

2. 路由设计

请求方法 请求路径 get参数 post 参数 备注
GET /students 渲染首页
GET /students/new 渲染添加学生页面
POST /students/new name, age, gender, hobbies 处理添加学生请求
GET /students/edit id 渲染编辑页面
POST /students/edit id, name, age, gender, hobbies 处理编辑页面
GET /students/delete id 处理删除请求

3. 将入口文件app.js和路由router.js功能分开

  • 路由模块router.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* router.js路由模块
* 职责:
* 处理路由
* 根据不同请求方式+请求路径设置具体的请求处理函数
* 模块职责要单一,有利于提高开发效率
*/

// express提供一种专门包装路由的方式
const express = require('express');
// 1.创建一个路由容器
const router = express.Router();

// 2.把router挂载到router路由容器中
router.get('/students', function (req, res){

});

router.get('/students/new', function (req, res){

});

router.post('/students/new', function (req, res){

});

router.get('/students/edit', function (req, res){

});

router.post('/students/edit', function (req, res){

});

router.get('/students/delete', function (req, res){

});

// 3.把路由导出,谁引用它谁就得到router
module.exports = router;
  • 入口模块app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* app.js入口模块
* 职责:
* 创建服务
* 做一些服务相关配置
* 模板引擎
* body-parser 解析post请求体
* 提供静态资源服务
* 挂载路由
* 监听端口,启动服务
*/
const express = require('express');
const app = express();
const router = require('./router.js');

//配置art-template
app.engine('html', require('express-art-template'));

//开放node_modules文件夹和public文件夹
app.use('/node_modules/', express.static('./node_modules'));
app.use('/public', express.static('./public'));

//把路由容器router挂载到app服务中
app.use(router);

app.listen(3000, function (){
console.log('express is running ....');
});

4. 设计操作数据的API文件模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
* student.js数据操作模块
* 职责:
* 操作文件中的数据,只操作数据,不关心业务
* */

const dbPath = './db.json'; //数据路径
const fs = require('fs');

/**
* 获取所有学生列表
* @param callback
* 第一个参数是err,成功是错误对象,失败是null
* 第二个参数是结果,成功是数组对象,失败是undefined
*
*/
exports.find = function (callback){
fs.readFile(dbPath, 'utf8', function (err, data){
if(err){
callback(err)
}
callback(null, JSON.parse(data).students)
})
};

/**
* 添加保存学生
*/
exports.save = function (){

};

/**
* 更新学生信息
*/
exports.update = function (){

};

/**
* 删除学生
*/
exports.delete = function (){

};

5. 步骤整理

  • 处理模板
  • 配置开放静态资源
  • 配置模板引擎
  • 简单路由:/students渲染页面
  • 路由设计
  • 提取路由模块
  • 封装students.js处理文件数据
  • 先写好student.js的文件结构
  • 实现具体功能