NodeJS Express博客项目实战 之 会员查看功能

在上一篇实现了管理员的功能,在这篇博文中将实现会员的功能

准备工作:

在视图views中新建一个user的文件夹

将视图views文件夹中的index.html的侧边导航栏中的会员管理的连接到/admin/user路由;

<li><a href="/admin/user" target="right"><span class="icon-caret-right"></span>会员管理</a></li>

在routers文件夹的admin中有user.js的路由:

需要在里面进行加载页面:

let express = require("express");

let router = new express.Router();
//会员管理首页
router.get('/',function(req,res,next){
     res.render("admin/user/index");
        }
        
        
    })
    

因此需要在视图views文件夹中的admin中的user文件夹中建立一个index.html

index.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="renderer" content="webkit">
<title></title>
<link rel="stylesheet" href="/public/admin/css/pintuer.css">
<link rel="stylesheet" href="/public/admin/css/admin.css">
<script src="/public/admin/js/jquery.js"></script>
<script src="/public/admin/js/pintuer.js"></script>
</head>
<body>
  <div class="panel admin-panel">
    <div class="panel-head"><strong class="icon-reorder"> 会员列表</strong> <a href="" style="float:right; display:none;">添加字段</a></div>
    <div class="padding border-bottom">
      <ul class="search" style="padding-left:10px;">
        <li>搜索:</li>
       
        <li>
          <form action="" method="get">
          <input type="text"  placeholder="请输入搜索关键字" name="search" class="input" style="width:250px; line-height:17px;display:inline-block" />
          <button class="button border-main icon-search">搜索</button>
          </form>
        </li>
      </ul>
    </div>
    <table class="table table-hover text-center">
      <tr>
        <th width="100" style="text-align:left; padding-left:20px;">ID</th>
        <th>用户名</th>
        <th>注册时间</th>
        <th>状态</th>
      </tr>
      <!-- ejs 的模板引擎 -->
      <% data.forEach(item=>{ %>
         <tr>
          <td style="text-align:left; padding-left:20px;"><%= item.id %></td>
          <td><%= item.username %></td>
          <td><%= item.time %></td>
          <td>
            <% if(item.status==0){ %>
              <a class="button border-green" href="javascript:;" οnclick="status(this,<%= item.id %>,1)"> 白名单</a>
            <% }else{ %>
              <a class="button border-red" href="javascript:;" οnclick="status(this,<%= item.id %>,0)">黑名单</a>
            <% } %>
          
          </td>
        </tr>
    
      <% }) %>
     
      
      <tr>
        <td colspan="8">
          <div class="pagelist"> 
            
          </div>
        </td>
      </tr>
    </table>
  </div>
<script>

</script>
</body>
</html>
index.html

查看功能:

在user.js中写入路由

let express = require("express");

let router = new express.Router();

// 导入数据库模块

const mysql = require("../../config/db.js");

// 导入时间格式化

const moment = require("moment");

//会员管理首页
router.get('/',function(req,res,next){
    
    
        
    
    mysql.query("select * from user order by id desc ,function(err,data){
        
        
    
        
        //判断是否有错误
        if(err){
            return "";
            
        }else{
            
            
            // 将时间格式化
                    data.forEach(item=>{
                        //item.username = item.username;
                        //item.time = moment(item.time*1000).format("YYYY-MM-DD HH:mm:ss");
                        item.time = moment(item.time).format("YYYY-MM-DD HH:mm:ss");
                            
                    })
            
                
            
            console.log(data);
            //加载页面
      res.render("admin/user/index",{data:data});
        }
        
        
    })
    
    
})



module.exports = router;

显示的效果:

 

 

搜索功能与分页功能

由于会员的人数可能会很多,因此需要一个分页效果的实现:

需要对分页函数的封装

数据库中会员的内容:

 

使用搜索与分页功能的效果展示:

 

 

 

在common文件夹中创建一个page.js

进行对分页函数的封装;

// 分页函数

function pagess(tot,p=1,size=5){
    // 计算截取的开始位置、结束位置
    let start = (p-1)*size;
    // 计算总页数
    let pages = Math.ceil(tot/size);

    // 展示分页效果
    let show ="";

    show +=`<a href="?p=1">首页</a>`; 
    show +=`<a href="?p=${ p- 1 >=1 ? p - 1 : 1 }">上一页</a> `;
    show +=`<span class="current">${p}</span>`;
    show +=`<a href="?p=${ Number(p)+1 <= pages ?  Number(p)+1 : pages }">下一页</a>`;
    show +=`<a href="?p=${pages}">尾页</a>`;

    return {
        start:start,
        size:size,
        show:show
    }
}

module.exports = pagess;

 

在user.js中进行导入分页方法:

// 导入分页方法

const page = require("../../common/page.js");

 

 1 let express = require("express");
 2 
 3 let router = new express.Router();
 4 
 5 // 导入数据库模块
 6 
 7 const mysql = require("../../config/db.js");
 8 // 导入分页方法
 9 
10 const page = require("../../common/page.js");
11 
12 // 导入时间格式化
13 
14 const moment = require("moment");
15 
16 //会员管理首页
17 router.get('/',function(req,res,next){
18     
19     
20         //如何开发分页
21         //第一页 0,5
22         //第二页 5,5个
23         //第三页 10 5
24         //第四页  15 5
25         //获取页码
26         let p = req.query.p ? req.query.p :1;
27         //console.log(p);
28         // 接受检索的数据
29 
30       let search = req.query.search ? req.query.search :"";
31 //默认每页展示数据
32 let size=3;
33 
34 
35 
36 
37      //计算总数据
38     
39     mysql.query("select count(*) tot from user where username like ? ",['%'+search+'%'],function(err,data){
40         
41         
42         
43         
44         // 判断
45         if (err) {
46             return "";
47         }else{
48             // 获取总数据
49             let tot = data[0].tot;
50 
51             let fpage = page(tot,p,size);
52             // 查看数据
53             
54             mysql.query("select * from user where username like ?  order by id desc limit ?,?",['%'+search+'%',fpage.start,fpage.size],function(err,data)
55             {
56         
57           //判断是否有错误
58         if(err){
59             return "";
60             
61         }else{
62             
63             
64             // 将时间格式化
65                     data.forEach(item=>{
66                         //item.username = item.username;
67                         //item.time = moment(item.time*1000).format("YYYY-MM-DD HH:mm:ss");
68                         item.time = moment(item.time).format("YYYY-MM-DD HH:mm:ss");
69                             
70                     })
71             
72                 
73             
74             console.log(data);
75             //加载页面
76       res.render("admin/user/index",{data:data,show:fpage.show,search:search});
77         }
78         
79         
80     
81             });
82         }
83     });
84 
85     
86 
87 });
88 
89 
90 
91 module.exports = router;
user.js的总代码
 1 <!DOCTYPE html>
 2 <html lang="zh-cn">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; 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, maximum-scale=1.0, user-scalable=no" />
 7 <meta name="renderer" content="webkit">
 8 <title></title>
 9 <link rel="stylesheet" href="/public/admin/css/pintuer.css">
10 <link rel="stylesheet" href="/public/admin/css/admin.css">
11 <script src="/public/admin/js/jquery.js"></script>
12 <script src="/public/admin/js/pintuer.js"></script>
13 </head>
14 <body>
15   <div class="panel admin-panel">
16     <div class="panel-head"><strong class="icon-reorder"> 会员列表</strong> <a href="" style="float:right; display:none;">添加字段</a></div>
17     <div class="padding border-bottom">
18       <ul class="search" style="padding-left:10px;">
19         <li>搜索:</li>
20        
21         <li>
22           <form action="" method="get">
23           <input type="text" value="<%= search %>" placeholder="请输入搜索关键字" name="search" class="input" style="width:250px; line-height:17px;display:inline-block" />
24           <button class="button border-main icon-search">搜索</button>
25           </form>
26         </li>
27       </ul>
28     </div>
29     <table class="table table-hover text-center">
30       <tr>
31         <th width="100" style="text-align:left; padding-left:20px;">ID</th>
32         <th>用户名</th>
33         <th>注册时间</th>
34         <th>状态</th>
35       </tr>
36       <!-- ejs 的模板引擎 -->
37       <% data.forEach(item=>{ %>
38          <tr>
39           <td style="text-align:left; padding-left:20px;"><%= item.id %></td>
40           <td><%= item.username %></td>
41           <td><%= item.time %></td>
42           <td>
43             <% if(item.status==0){ %>
44               <a class="button border-green" href="javascript:;" οnclick="status(this,<%= item.id %>,1)"> 白名单</a>
45             <% }else{ %>
46               <a class="button border-red" href="javascript:;" οnclick="status(this,<%= item.id %>,0)">黑名单</a>
47             <% } %>
48           
49           </td>
50         </tr>
51     
52       <% }) %>
53      
54       
55       <tr>
56         <td colspan="8">
57           <div class="pagelist"> 
58              <%- show%>
59           </div>
60         </td>
61       </tr>
62     </table>
63   </div>
64 <script>
65 
66 </script>
67 </body>
68 </html>
会员index.html的总代码

 

转载于:https://www.cnblogs.com/jiguiyan/p/11367603.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值