ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【前端】NodeJS:实战案例——记账本 [打印本页]

作者: 莫张周刘王    时间: 2024-8-16 05:55
标题: 【前端】NodeJS:实战案例——记账本
1 lowdb数据库


  1. //导入 lowdb
  2. const low = require('lowdb')
  3. const FileSync = require('lowdb/adapters/FileSync')
  4. const adapter = new FileSync('db.json');
  5. //获取 db 对象
  6. const db = low(adapter);
  7. //初始化数据
  8. db.defaults({ posts: [], user: {} }).write()
  9. //写入数据
  10. db.get('posts').push({id: 2, title: '今天天气还不错~~'}).write();
  11. db.get('posts').unshift({id: 3, title: '今天天气还不错~~'}).write();
  12. //获取单条数据
  13. let res = db.get('posts').find({id: 1}).value();
  14. console.log(res);
  15. //获取数据
  16. console.log(db.get('posts').value());
  17. //删除数据
  18. let res = db.get('posts').remove({id: 2}).write();
  19. console.log(res);
  20. //更新数据
  21. db.get('posts').find({id: 1}).assign({title: '今天下雨啦!!!'}).write();
复制代码
  1. /*
  2.         db.json
  3. */
  4. {
  5.   "posts": [
  6.     {
  7.       "id": 1,
  8.       "title": "今天下雨啦!!!"
  9.     }
  10.   ],
  11.   "user": {}
  12. }
复制代码
2 记账本案例


  1. var express = require('express');
  2. var router = express.Router();
  3. //导入 lowdb
  4. const low = require('lowdb')
  5. const FileSync = require('lowdb/adapters/FileSync')
  6. const adapter = new FileSync(__dirname + '/../data/db.json');
  7. //获取 db 对象
  8. const db = low(adapter);
  9. //导入 shortid
  10. const shortid = require('shortid');
  11. //记账本的列表
  12. router.get('/account', function(req, res, next) {
  13.           //获取所有的账单信息
  14.           let accounts = db.get('accounts').value();
  15.           res.render('list', {accounts: accounts});
  16. });
  17. //添加记录
  18. router.get('/account/create', function(req, res, next) {
  19.           res.render('create'); //render可将.ejs文件的内容响应给浏览器
  20. });
  21. //新增记录
  22. router.post('/account', (req, res) => {
  23.           //生成 id
  24.           let id = shortid.generate();
  25.           //写入文件
  26.           db.get('accounts').unshift({id:id, ...req.body}).write();
  27.           //成功提醒
  28.           res.render('success', {msg: '添加成功~~~', url: '/account'});
  29. });
  30. //删除记录
  31. router.get('/account/:id', (req, res) => {
  32.           //获取 params 的 id 参数
  33.           let id = req.params.id;
  34.           //删除
  35.           db.get('accounts').remove({id:id}).write();
  36.           //提醒
  37.           res.render('success', {msg: '删除成功~~~', url: '/account'});
  38. });
  39. module.exports = router;
复制代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3.   <head>
  4.     <meta charset="UTF-8" />
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7.     <title>添加记录</title>
  8.     <link
  9.       href="/css/bootstrap.css"
  10.       rel="stylesheet"
  11.     />
  12.     <link href="/css/bootstrap-datepicker.css" rel="stylesheet">
  13.   </head>
  14.   <body>
  15.     <div class="container">
  16.       <div class="row">
  17.         <div class="col-xs-12 col-lg-8 col-lg-offset-2">
  18.           <h2>添加记录</h2>
  19.           <hr />
  20.           <form method="post" action="/account">
  21.             <div class="form-group">
  22.               <label for="item">事项</label>
  23.               <input
  24.                 name="title"
  25.                 type="text"
  26.                 class="form-control"
  27.                 id="item"
  28.               />
  29.             </div>
  30.             <div class="form-group">
  31.               <label for="time">时间</label>
  32.               <input
  33.                 name="time"
  34.                 type="text"
  35.                 class="form-control"
  36.                 id="time"
  37.               />
  38.             </div>
  39.             <div class="form-group">
  40.               <label for="type">类型</label>
  41.               <select name="type" class="form-control" id="type">
  42.                 <option value="-1">支出</option>
  43.                 <option value="1">收入</option>
  44.               </select>
  45.             </div>
  46.             <div class="form-group">
  47.               <label for="account">金额</label>
  48.               <input
  49.                 name="account"
  50.                 type="text"
  51.                 class="form-control"
  52.                 id="account"
  53.               />
  54.             </div>
  55.             
  56.             <div class="form-group">
  57.               <label for="remarks">备注</label>
  58.               <textarea name="remarks" class="form-control" id="remarks"></textarea>
  59.             </div>
  60.             <hr>
  61.             <button type="submit" class="btn btn-primary btn-block">添加</button>
  62.           </form>
  63.         </div>
  64.       </div>
  65.     </div>
  66.     <script src="/js/jquery.min.js"></script>
  67.     <script src="/js/bootstrap.min.js"></script>
  68.     <script src="/js/bootstrap-datepicker.min.js"></script>
  69.     <script src="/js/bootstrap-datepicker.zh-CN.min.js"></script>
  70.     <script src="/js/main.js"></script>
  71.   </body>
  72. </html>
复制代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3.   <head>
  4.     <meta charset="UTF-8" />
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7.     <title>Document</title>
  8.     <link
  9.       href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css"
  10.       rel="stylesheet"
  11.     />
  12.     <style>
  13.       label {
  14.         font-weight: normal;
  15.       }
  16.       .panel-body .glyphicon-remove{
  17.         display: none;
  18.       }
  19.       .panel-body:hover .glyphicon-remove{
  20.         display: inline-block
  21.       }
  22.     </style>
  23.   </head>
  24.   <body>
  25.     <div class="container">
  26.       <div class="row">
  27.         <div class="col-xs-12 col-lg-8 col-lg-offset-2">
  28.           <h2>记账本</h2>
  29.           <hr />
  30.           <div class="accounts">
  31.             <% accounts.forEach(item => { %>
  32.             <div class="panel <%= item.type==='-1' ? 'panel-danger' : 'panel-success'  %>">
  33.               <div class="panel-heading"><%= item.time %></div>
  34.               <div class="panel-body">
  35.                 <div class="col-xs-6"><%= item.title %></div>
  36.                 <div class="col-xs-2 text-center">
  37.                   <span class="label <%= item.type==='-1' ? 'label-warning' : 'label-success'  %>"><%= item.type==='-1' ? '支出' : '收入'  %></span>
  38.                 </div>
  39.                 <div class="col-xs-2 text-right"><%= item.account %> 元</div>
  40.                 <div class="col-xs-2 text-right">
  41.                   <a href="/account/<%= item.id %>">
  42.                   <span
  43.                     class="glyphicon glyphicon-remove"
  44.                     aria-hidden="true"
  45.                   ></span>
  46.                 </a>
  47.                 </div>
  48.               </div>
  49.             </div>
  50.             <% }) %>
  51.           </div>
  52.         </div>
  53.       </div>
  54.     </div>
  55.   </body>
  56. </html>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4