1,项目环境搭建
1.1项目介绍
图书管理系统:
1,通过连接数据库实现图书的增删改查操作。
1.2案例初始化
1,建立与项目相关的文件夹
1)public静态资源
2)model数据库操作
3)route路由
4)views模板
2,初始化项目文件
npm init -y
3,下载所需的第三方模块
npm install express mysql art-template express-art-template --save
4,创建网站服务器
5,构建模块化路由
6,构建图书管理页面模块
2,项目的功能实现
2.1打开首页面图书列表的展示
1,创建books数据库表格,
2,连接数据库
3,创建路由
3,通过sql语句查询所有图书
4,通过模板引擎将查询到的所有图书渲染到首页面中
部分代码展示:
index.js(入口文件)
//入口文件const express = require('express');
const template = require('art-template');
const bodyParser = require('body-parser');
const path = require('path');// 导入路由模块const router = require('./router/router');const app = express();
app.use(express.static('views'))
// 设置模板引擎的路径
app.set('views',path.join(__dirname, 'views'));
// 设置模板引擎app.set('view engine','art');// 安装express-art-templateapp.engine('art', require('express-art-template'));
// 处理请求参数// 挂载参数处理的中间件 postapp.use(bodyParser.urlencoded({ extended: false }));
// 处理json参数app.use(bodyParser.json());
// 配置路由app.use(router);
//监听端口
app.listen(3000, () => {
console.log('running.....');
})
router.js:(路由文件)
// 路由封装
const express = require('express');const router = express.Router();
const service = require('../server/server');
// 查询的功能 查询所有的书籍信息
router.get('/books', service.showInfo);
service.js(业务实现文件)
//引入相关模块
const path = require('path');
const fs = require('fs');
const db = require('../db');
// 显示所有的数据
exports.showInfo = (req, res) => {
let sql = 'select * from book'
db.base(sql, null, (result) => {
res.render('index', { list: result });
})}
2.2添加图书功能的实现
1,点击添加按钮跳转到添加图书的页面
2,图书添加功能的实现:
1,图书的id实现自动增长(通过数据库实现ID递增功能)
2,获取用户所添加的数据
3,将获取的数据添加进数据库中
4,重新渲染首页面
部分代码展示:
1,)跳转到添加图书的页面:
*跳转的路由处理:
// 添加图书的路由处理
router.get('/toAddBook', service.toAddBook);
*跳转的业务处理:
// 跳转到 添加 图书的页面
exports.toAddBook = (req, res) => {
res.render('addBook', {});
}
2)添加图书
*添加图书功能的路由处理:
// 添加图书的功能
router.post('/books/book', service.addBook);
*添加图书功能的业务实现:
// 实现图书数据的添加 业务
exports.addBook = (req, res) => {
let info = req.body;
let book = {};
for (let key in info) {
book[key] = info[key];
}
let sql = 'insert into book set ?';
db.base(sql, book, (result) => {
if (result.affectedRows == 1) {
res.redirect('index');
}
});}
思路分析:通过req.body获取到用户所输入的数据,新建一个空的book对象,遍历获取到的数据存放在book对象中,通过sql的添加语句insert into向数据库插入数据,通过res.redirect方法重新渲染首页面。
2.3图书信息修改功能的实现
1,点击修改按钮跳转到对应的图书修改页面
2,获取用户点击的id值
3,通过sql查询语句,查询相关信息内容渲染到修改的页面中
4,获取用户修改后的数据
5,通过sql修改语句修改数据库相关内容
6,重新渲染主页面
部分代码展示:
设置跳转到编辑界面的路由
// 在修改之前 首先要跳转到编辑的界面, id传递过去
router.get('/books/toeditbook', service.toEditBook);
跳转到编辑界面,获取id查询对应的数据:
exports.toEditBook = (req, res) => {
let id = req.query.id;
let sql = 'select * from book where id=?';
let data = [id];
db.base(sql, data, (result) => {
res.render('editBook', result[0]);
})}
思路分析:通过req.query.id获取到用户所修改数据的id,设置sql查询语句查询满足id条件的数据渲染到修改页面中