node.js实现图书增删改查

爱被打了一巴掌 2021-11-18 00:58 531阅读 0赞

实现图书的增删改查

1.分析
在这里插入图片描述
2.文件

  1. 生成json文件包

    F:\others\XAMPP\htdocs\Epr\mybook>npm init -y
    Wrote to F:\others\XAMPP\htdocs\Epr\mybook\package.json:

    {
    “name”: “mybook”,
    “version”: “1.0.0”,
    “description”: “”,
    “main”: “index.js”,
    “scripts”: {

    1. "test": "echo \"Error: no test specified\" && exit 1"

    },
    “keywords”: [],
    “author”: “”,
    “license”: “ISC”
    }

  2. 安装依赖包

    F:\others\XAMPP\htdocs\Epr\mybook>cnpm install express art-template body-parser —save

  3. 安装模板引擎express-art-template

    F:\others\XAMPP\htdocs\Epr\mybook>express art-template

  4. 添加文件
    在这里插入图片描述

  5. 在views文件添加index.art文件:
    views文件新建:editBook.art,addBook.art

    图书管理添加图书














    {
    {each list}}








    {
    {/each}}


    编号 名称 作者 分类 描述 操作
    {
    {$value.id}}
    {
    {$value.name}}
    {
    {$value.author}}
    {
    {$value.category}}
    {
    {$value.desc}}
    修改|删除

addBook添加图书

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>添加图书</title>
  6. </head>
  7. <body>
  8. <div>添加图书</div>
  9. <form action="/addBook" method="post">
  10. 名称:<input type="text" name="name"><br>
  11. 作者:<input type="text" name="author"><br>
  12. 分类:<input type="text" name="category"><br>
  13. 描述:<input type="text" name="desc"><br>
  14. <input type="submit" value="提交">
  15. </form>
  16. </body>
  17. </html>

editBook修改图书

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>修改图书</title>
  6. </head>
  7. <body>
  8. <div>修改图书</div>
  9. <form action="/editBook" method="post">
  10. <input type="hidden" name="id" value="{
  11. {id}}">
  12. 名称:<input type="text" name="name" value="{
  13. {name}}"><br>
  14. 作者:<input type="text" name="author" value="{
  15. {author}}"><br>
  16. 分类:<input type="text" name="category" value="{
  17. {category}}"><br>
  18. 描述:<input type="text" name="desc" value="{
  19. {desc}}"><br>
  20. <input type="submit" value="提交">
  21. </form>
  22. </body>
  23. </html>
  1. 新建文件夹public:在里面建立style.css

    .title {

    1. text-align: center;
    2. background-color: lightgreen;
    3. height: 50px;
    4. line-height: 50px;
    5. font-size: 24px;
    6. }
    7. .title>a{
    8. padding-left: 30px;
    9. }
    10. .content {
    11. background-color: lightblue;
    12. }
    13. .content table {
    14. width: 100%;
    15. text-align: center;
    16. border-right: 1px solid orange;
    17. border-bottom: 1px solid orange;
    18. }
    19. .content td,th {
    20. border-left: 1px solid orange;
    21. border-top: 1px solid orange;
    22. height: 40px;
    23. line-height: 40px;
    24. }
  2. js文件
    index.js

    /*
    图书管理入口文件:

    • */

    const express = require(‘express’);
    const template = require(‘art-template’);
    const bodyParser = require(‘body-parser’);
    const router = require(‘./router.js’);
    const path = require(‘path’);
    const app = express();

  1. //启动静态资源服务
  2. app.use('/www', express.static('public'));
  3. //1先使用中间件
  4. //设置模板引擎
  5. app.set('views', path.join(__dirname, 'views'));
  6. app.set('view engine', 'art');
  7. //使用express兼容art-template模板引擎
  8. app.engine('art', require('express-art-template'));
  9. //3处理请求参数
  10. //3.1
  11. app.use(bodyParser.urlencoded({ extended: false }));
  12. app.use(bodyParser.json());
  13. //2启动服务器
  14. //2.1配置路由
  15. app.use(router);//app.use() requires a middleware function在router.js导出模块
  16. //2.2监听窗口
  17. app.listen(8079, '127.0.0.1', () => {
  18. console.log('running');
  19. })

router.js

  1. //路由模块
  2. const express = require('express');
  3. const router = express.Router();
  4. const service =require('./service.js');
  5. //1.加载模块service.js
  6. router.get('/', service.showIndex);
  7. //2.添加图书,跳转到添加图书页面。
  8. router.get('/toAddBook', service.toAddBook);
  9. //3.添加图示:提交表单
  10. router.post('/addBook', service.addBook);
  11. //4.跳转到编辑图书信息页面
  12. router.get('/toEditBook', service.toEditBook);
  13. //5.编辑图书信息提交表单
  14. router.post('/editBook', service.editBook);
  15. //6.删除图书信息
  16. // 删除图书信息
  17. router.get('/deleteBook', service.deleteBook);
  18. //导出:模块
  19. module.exports = router;

service.js

  1. //业务模块:
  2. const data = require('./data.json');
  3. const path = require('path');
  4. const fs = require('fs');
  5. //3.1自动生成图书编号(自增)
  6. let maxBookCode = ()=> {
  7. let arr = [];
  8. data.forEach((item) => {
  9. arr.push(item.id);
  10. });
  11. return Math.max.apply(null, arr);
  12. }
  13. let writeDataToFile = (res)=>{
  14. //把存好的数据写入文件
  15. fs.writeFile(path.join(__dirname, 'data.json'), JSON.stringify(data, null, 4), (err) => {
  16. if(err){
  17. res.send('server error');
  18. }
  19. //写入成功后跳转到主页面。
  20. res.redirect('/');
  21. });
  22. }
  23. //1.:渲染主页面导出
  24. exports.showIndex = (req, res) => {
  25. res.render('index', {list: data});//index模板名称
  26. }
  27. //2.跳转到添加图书页面
  28. exports.toAddBook = (req, res) => {
  29. res.render('addBook', {});
  30. }
  31. //3.添加图书,保存数据
  32. exports.addBook = (req, res) => {
  33. //获取表单数据
  34. let info = req.body;
  35. //把表单数据存放
  36. let book = {};
  37. for(let key in info){
  38. book[key] = info[key];
  39. }
  40. book.id = maxBookCode() + 1;
  41. //把图书信息放到book中
  42. data.push(book);
  43. //把存好的数据写入文件
  44. writeDataToFile(res);
  45. }
  46. //4.跳转到编辑页面
  47. exports.toEditBook = (req, res) => {
  48. let id = req.query.id;
  49. let book = null;
  50. data.forEach((item) => {
  51. if(id == item.id){
  52. book = item;
  53. return;//跳出循环
  54. }
  55. });
  56. res.render('editBook', book);
  57. }
  58. //5.编辑图书,信息数据更新,
  59. exports.editBook = (req, res) => {
  60. let info = req.body;//获取表单数据。编辑的数据
  61. //遍历所有数据
  62. data.forEach((item) => {
  63. //判断是不是自己编辑的那条数据
  64. if(info.id == item.id){
  65. //把信息更新
  66. for(let key in info){
  67. item[key] = info[key];//把旧的信息用新的覆盖
  68. }
  69. return;
  70. }
  71. });
  72. writeDataToFile(res);
  73. }
  74. //6.删除图书信息
  75. exports.deleteBook = (req, res) => {
  76. //获取id
  77. console.log(req.query.body);
  78. let id = req.query.id;
  79. data.forEach((item, index) => {
  80. if(id == item.id){
  81. //删除数组的一项数据
  82. // console.log(item.id);
  83. data.splice(index, 1);//splice() 方法用于添加或删除数组中的元素。
  84. maxBookCode();
  85. }
  86. return;
  87. });
  88. writeDataToFile(res);
  89. }

最后实现图:
在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,531人围观)

还没有评论,来说两句吧...

相关阅读

    相关 nodejs+express+mysql 增删

    写在最前面的话:         鉴于评论区的问题有点超出自己的想象,故重拾express,从头开始重新敲了一遍基于express的增删改查,希望大家有疑问先点击[这里][L