node.js图书管理小项目讲解

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条件的数据渲染到修改页面中

猜你喜欢

转载自blog.csdn.net/weixin_42056687/article/details/107995097