node+mongodb+express后台管理项目

下面是一个完整的mongodb数据库的增删改查,请忽略js

 

//view



indexq.ejs  前台首页

<!DOCTYPE html>
<html>
  <head>
    <title>Bootstrap 101 Template</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="/stylesheets/bootstrap.css">
    <link rel="stylesheet" href="/stylesheets/mystyle.css">
  </head>
  <style>
       #ooo{width:100%;height: 200px;
       }
  </style>
  <body id="top">
<!--******************************bar栏*************-->
<!--<div id="ooo">
   <img src="/images/1.gif" /> <img src="/images/1.gif" /> <img src="/images/1.gif" /> 

</div>-->
  <div class="site-topbar">
   <div class="container-fluid">
      <div class="row">
        <div class="col-md-12">
            <div class="topbar-nav">
              <a href="index.html">小米网</a><span class="sep">|</span><a href="http://www.miui.com/">MIUI</a><span class="sep">|</span><a href="http://www.miliao.com/">米聊</a><span class="sep">|</span><a href="http://game.xiaomi.com/hy/index.html">游戏</a><span class="sep">|</span><a href="http://www.duokan.com/">多看阅读</a><span class="sep">|</span><a href="i.mi.com">云服务</a><span class="sep">|</span><a href="http://www.mi.com/c/appdownload/">小米网移动版</a><span class="sep">|</span><a href="http://static.mi.com/feedback/">问题反馈</a><span class="sep">|</span><a href="#">Select Region</a>
            </div>
            <div class="topbar-cart" id="J_miniCartTrigger">
                <a class="cart-mini" id="J_miniCartBtn" href="#"><img src="/images/gouwuce.png" alt="">购物车<span class="cart-mini-num J_cartNum">(0)</span></a>
                <div class="cart-menu" id="J_miniCartMenu" style="display:none;">
                  <div class="loading">
                    <span>这里神马都没有!~</span>
                  </div>
                </div>
            </div>
            <div class="topbar-info">
              <a class="link" data-toggle="modal" 
                   data-target="#myModal" href="#">后台登录</a><span class="sep">|</span>
                   <a class="link" data-toggle="modal" 
                   data-target="#myModal2" href="#">注册</a>
                <!-- 模态框(Modal) 登录-->
                <div class="modal fade" id="myModal" tabindex="-1" role="dialog" 
                   aria-labelledby="myModalLabel" aria-hidden="true">
                   <div class="modal-dialog">
                      <div class="modal-content text-center">
                         <div class="modal-header text-center">
                            <button type="button" class="close" 
                               data-dismiss="modal" aria-hidden="true">
                                  &times;
                            </button>
                          
                            <h1 class="modal-title" id="myModalLabel">
                               后台账号登录
                            </h1>
                         </div>
                         <div class="modal-body text-center">
                          <form>
                           <input class="item_account" autocomplete="off" type="text" name="user" id="userdl" placeholder="邮箱/手机号码/帐号">
                           <input type="password" placeholder="密码" name="pwd" id="passdl">
                           <input class="btnadpt btn_orange" id="login" type="submit" value="立即登录">
                         </form>
                            <fieldset class="oth_type_tit">
                              <legend style="text-align:center;" class="oth_type_txt">其他方式登录</legend>
                            </fieldset>
                           
                         </div>
                         <a href="">
                              <span>注册账号</span>
                              <span>|</span>
                              <span>忘记密码</span>
                            </a>
                      </div><!-- /.modal-content -->
                </div><!-- /.modal -->
                </div>
                 <!-- 模态框(Modal)2 注册-->
                <div class="modal fade" id="myModal2" tabindex="-1" role="dialog" 
                   aria-labelledby="myModalLabel" aria-hidden="true">
                   <div class="modal-dialog">
                      <div class="modal-content text-center">
                         <div class="modal-header text-center">
                            <button type="button" class="close" 
                               data-dismiss="modal" aria-hidden="true">
                                  &times;
                            </button>
                            <a href="http://hd.mi.com/y/02021d/index.html"><img src="img/logo.png" alt=""></a>
                            <h1 class="modal-title" id="myModalLabel">
                               注册账号
                            </h1>
                         </div>
                         <div class="modal-body text-center">
                          <form>
                           <input class="item_account" autocomplete="off" type="text" name="user" id="zucename" placeholder="注册用户名">
                           <input type="tel" placeholder="设置密码" name="pwd" id="szpass">
                           <input style="width:170px;" class="code" type="text" name="icode" autocomplete="off" placeholder="图片验证码">
                           <img style="margin-top:-47px;float:right;" alt="图片验证码" title="看不清换一张" class="icode_image" src="img/yzm.png">
                           <input class="btnadpt btn_orange" id="zuce" type="submit" value="立即注册">
                           </form>
                            <p class="msg">
                            点击“立即注册”,即表示您同意并愿意遵守小米
                            <a href="http://www.miui.com/res/doc/eula/cn.html" target="_blank" title="用户协议">用户协议</a>
                            和
                            <a href="http://www.miui.com/res/doc/privacy/cn.html" target="_blank" title="隐私政策">隐私政策</a>
                            </p>
                      </div><!-- /.modal-content -->
                </div><!-- /.modal -->
              </div>
            </div>
        </div>
      </div> 
    </div>
  </div>
</div>


 
<!--**********************我的代码*****************************-->
<div id="wode" >
 <div>
<br />标题:<input type="text" id="input1"/>
<br />类别:<input type="text" id="input2"/>
<br />作者:<input type="text" id="input3"/>
<!-- <br />时间:<input type="time" id="input4"/>-->
 

<button id="btn">提交</button>

 </div>
</div>




     
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="/javascripts/jquery-1.11.3.js"></script>
    <script src="/javascripts/myapp.js"></script>
     <script src="/javascripts/jump.js"></script>
     <script>
          $(function(){
             $(".list2 img").each(function(k,img){
              new JumpObj(img,10);
              //第一个参数代表元素对象
              //第二个参数代表抖动幅度
            });
             //注册
             $("#zuce").click(function(e){
                 e.preventDefault();
                  $.ajax({
                     type:"post",
                     url:"users/indexq",
                     data:{name:$("#zucename").val(),pass:$("#szpass").val()},
                     success:function(data){
                        if(data==1){
                         alert("注册成功")
                       location.href='/indexq'
                        }else{
                          alert("注册失败")
                          
                        }
                     }
          
                  })             
              }) 
              
              //登录
              $("#login").click(function(e){
                 e.preventDefault();
                  $.ajax({
                     type:"post",
                     url:"users/login",
                     data:{user:$("#userdl").val(),pass:$("#passdl").val()},
                     success:function(data){
                        if(data==1){
                         alert("登录成功")
                       location.href='/'
                        }else{
                          alert("登录失败")
                          
                        }
                     }
          
                  })             
              })       
              
              //增删改查
              $("#btn").click(function(e){
                 e.preventDefault();
                  $.ajax({
                     type:"post",
                     url:"users/input",
                     data:{biaoti:$("#input1").val(),leibie:$("#input2").val(),zuozhe:$("#input3").val(),time:$("#input4").val()},
                     success:function(data){
                        if(data==1){
                         alert("提交成功")
                       //location.href='/indexq'
                        }else{
                          alert("提交失败")
                          
                        }
                     }
          
                  })             
              }) 
              
              //结尾
          })


     </script>
    <script src="/javascripts/bootstrap.js"></script>
  </body>

</html>

 

//后台主页index


<!DOCTYPE html>
<html>


<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>大气网站后台模板</title>
<link rel="stylesheet" href="/stylesheets/layui.css">
</head>
  
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
<div class="layui-header">
<div class="layui-logo">大气网站后台模板</div>
<!-- 头部区域(可配合layui已有的水平导航) -->


<ul class="layui-nav layui-layout-right">
<li class="layui-nav-item">
<a href="javascript:;">
<img src="images/1.gif" class="layui-nav-img">
您好呀管理员:
<%if(name){%>
  <span><%- name %></span>
<%}%>
 
</a>
<dl class="layui-nav-child">
<dd>
<a href="">基本资料</a>
</dd>
<dd>
<a href="">安全设置</a>
</dd>
</dl>
</li>
<li class="layui-nav-item">
<a href="/xiaohui">退出登录</a>
</li>
</ul>
</div>


<div class="layui-side layui-bg-black">
<div class="layui-side-scroll">
<!-- 左侧导航区域(可配合layui已有的垂直导航) -->
<ul class="layui-nav layui-nav-tree" lay-filter="test">
<li class="layui-nav-item layui-nav-itemed">
<a class="" href="javascript:;">菜单栏</a>
<dl class="layui-nav-child">
<dd>
<a  target="right">产品管理</a>
</dd>
<dd>
<a href="" target="right">新闻分类管理</a>
</dd>
<dd>
<a href="news" target="right">新闻管理</a>
</dd>
<dd>
<a href="" target="right">友情链接</a>
</dd>
<dd>
<a href="" target="right">留言管理</a>
</dd>
<dd>
<a href="" target="right">用户管理</a>
</dd>
<dd>
<a href="javascript:void(0)"  onclick="updatePwd('修改密码',1)">修改密码</a>
</dd>
</dl>
</li>
<li class="layui-nav-item">
<a href="javascript:;">菜单栏</a>
<dl class="layui-nav-child">

</dl>
</li>
<li class="layui-nav-item">
<a href="javascript:;">菜单栏</a>
<dl class="layui-nav-child">

</dl>
</li>

<li class="layui-nav-item">
<a href="javascript:;">菜单栏</a>
<dl class="layui-nav-child">

</dl>
</li>

<li class="layui-nav-item">
<a href="javascript:;">菜单栏</a>
<dl class="layui-nav-child">

</dl>
</li>

<li class="layui-nav-item">
<a href="javascript:;">菜单栏</a>
<dl class="layui-nav-child">

</dl>
</li>

</ul>
</div>
</div>


<div class="layui-body" style="z-index: 0;">
<!-- 内容主体区域 -->
<div style="padding: 15px;">
<iframe src="news" name="right" frameborder="0" width="100%" height="1200"></iframe>


</div>
</div>


<div class="layui-footer">
<!-- 底部固定区域 -->
底部固定区域
</div>
</div>

<script type="text/javascript" src="/javascripts/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="/javascripts/myplugs/js/plugs.js">
</script>
<script type="text/javascript">
//添加编辑弹出层
function updatePwd(title, id) {
$.jq_Panel({
title: title,
iframeWidth: 500,
iframeHeight: 300,
url: "updatePwd.ejs"
});
}
</script>
<script src="/javascripts/layui.js"></script>
<script>
//JavaScript代码区域
layui.use('element', function() {
var element = layui.element;


});

console.log(<%- name %>)

</script>
</body>
</html>


 

 

app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');


var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');


var app = express();//生成一个express实例 app。
var session = require("express-session");
// view engine setup
//设置 views 文件夹为存放视图文件的目录, 即存放模板文件的地方,__dirname 为全局变量,存储当前正在执行的脚本所在的目录。
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');//设置视图模板引擎为 ejs。


app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());//加载解析cookie的中间件。
app.use(express.static(path.join(__dirname, 'public')));//设置public文件夹为存放静态文件的目录。


//session
app.use(session({ 
secret: 'recommend 128 bytes random string', 
cookie: { maxAge: 20000 * 60 * 1000 },
resave: true,
saveUnintialized: true
}))

//路由控制器。

app.use('/', indexRouter);
app.use('/users', usersRouter);


// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});


// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};


  // render the error page
  res.status(err.status || 500);
  res.render('error');
});


module.exports = app;


 

路由routes

index.js

var express = require('express');
var router = express.Router();
var mongo = require("mongodb").MongoClient;
var url1 = "mongodb://localhost:27017/mydb";
var async=require('async')
var ObjectId=require('mongodb').ObjectId;
/* GET home page. */
//用户名存储
router.get('/', function(req, res, next) {
  res.render('index', {name:req.session.name});//render渲染
  console.log(req.session.name)
  
});
//退出销毁用户名
router.get('/xiaohui', function(req, res, next) {
 req.session.destroy(function(err){ 
if(err){ 
console.log(err) 
}else{ 
res.redirect("/") 
} 
})


  
});


router.get('/news', function(req, res, next) {
var count = 0;
  var page = 0;
  var size = 5;
  //页码
  var pagenum = req.query.pagenum;
  var pagenum = pagenum?pagenum:1;
   mongo.connect(url1,function(err,database){
      database.collection("news1",function(err,coll){
      
      //异步处理
 async.series([
  function(callback){
  coll.find({}).toArray(function(err,data){
  count = data.length;//数据条数
  
  //page = page<1? 1:page;
  page = Math.ceil(count/size);//总共的页数
  
  pagenum = pagenum<1?1:pagenum;//页码小于1;显示1
  pagenum = pagenum>page?page:pagenum;//页码大于总页数;显示总页数
  
  callback(null,'')
  })
  
  },function(callback){
  
  coll.find().sort({_id:-1}).limit(size).skip((pagenum-1)*size).toArray(function(err,data){
    callback(null,data)
  })
  }
 ],function(err,data){
        res.render('news',{list:data[1],page:page,count:count,pagenum:pagenum,size:size})
        database.close()
  
 })
      
      
      
      
      
    // if(err) throw err
//      coll.find().sort({_id:-1}).toArray(function(err,data){
//      
//          res.render('news',{list:data});//render渲染
//          database.close()
//      })
      })
   })


});










//新闻数据传页面

router.get('/indexq', function(req, res) {
  res.render('indexq', { });//render渲染
});


router.get('/login', function(req, res) {
  res.render('login', { });//render渲染
});


router.get('/input', function(req, res) {
  res.render('input', { });//render渲染
});


router.get('/alert', function(req, res) {
  res.render('alert', { });//render渲染
});


module.exports = router;








 

user.js

var express = require('express');
var router = express.Router();
var mongo = require("mongodb").MongoClient;
var url1 = "mongodb://localhost:27017/mydb";
var ObjectId=require('mongodb').ObjectId;






/* GET users listing. */
router.get('/', function(req, res, next){
  
});


//前端首页注册
router.post('/indexq', function(req, res){
      // console.log(req.body) 
   mongo.connect(url1,function(err,database){
      database.collection("users",function(err,coll){
            // console.log(coll)
        coll.find({name:req.body.name}).toArray(function(err,data){
           // console.log(data)
           //console.log(req.body);
           
            if(data.length>0){           
              res.send("2")
              database.close()
            }else{
             coll.insert(req.body,function(){
               res.send("1")
              database.close()
                         
             })
                          
            }
    
        })
       })
   })
  
});




//登录


router.post('/login', function(req, res){
   console.log(req.body) 
   mongo.connect(url1,function(err,database){
      database.collection("users",function(err,coll){
    // if(err) throw err
        coll.find({"name":req.body.user,"pass":req.body.pass}).toArray(function(err,data){
          console.log(data)
            if(data.length>0){
            req.session.name = data[0].name;
            //console.log(data[0].user)
              res.send("1")
              database.close()
            }else{
             
               res.send("2")
              database.close()
                
            }
    
        })
      })
   })
  
});




//前端页面提交
router.post('/input', function(req, res){
      // console.log(req.body) 
   mongo.connect(url1,function(err,database){
      database.collection("news1",function(err,coll){
            // console.log(coll)
        coll.find({name:req.body.biaoti}).toArray(function(err,data){
            //console.log(data)
           //console.log(req.body);
           
            if(data.length>0){           
              res.send("2")
              database.close()
            }else{
             coll.insert(req.body,function(){
               res.send("1")
              database.close()
                         
             })
                          
            }
    
        })
       })
   })


});


//删除数据


router.post('/shanchu', function(req, res){
//console.log(req.body.biaoti) 
//console.log(req.body)
    mongo.connect(url1, function(err, db) {
    if (err) throw err;
    var dbo = db.db("mydb");
      var whereStr = {"biaoti":req.body.biaoti};  // 查询条件
      //console.log(whereStr)
    dbo.collection("news1").deleteOne(whereStr,function(err, obj){
      if (err) throw err;
        console.log("文档删除成功");
        res.send("1")
        db.close();
    });
      
   });
 
});






//修改数据
router.post('/xiugai', function(req, res){
//console.log(req.body) 

mongo.connect(url1, function(err, db) {
   if (err) throw err;
   var dbo = db.db("mydb");//选择数据库名字
   var yuanlai = {"biaoti":req.body.biaoti,"leibie":req.body.leibie,"zuozhe":req.body.zuozhe};  // 查询条件
   var updateStr = {$set: {"biaoti":req.body.biaoti1,"leibie":req.body.leibie1,"zuozhe":req.body.zuozhe1}};
   //console.log(yuanlai,updateStr)
   dbo.collection("news1").updateOne(yuanlai, updateStr, function(err, data) {
       if (err) throw err;
       console.log("文档更新成功");
       res.send("1")
       db.close();
   });
 });
 
});




//查询
router.post('/chaxun', function(req, res){
var whereStr = req.body.biaoti
 mongo.connect(url1, function(err, db) {
    var dbo = db.db("mydb");
     // 查询条件
   dbo.collection("news1").find({$or:[{biaoti:whereStr},{leibie:whereStr},{zuozhe:whereStr}]}).toArray(function(err, result) {
       console.log(result)
      if(result.length){
      res.send(result);
       
      }else{
      res.send("0")
      
      }
       db.close();
   });
   
 });
 
});






module.exports = router;

 

 

ExpressMongoDB是一对非常强大的组合,可以用来构建管理后台。Express是一种基于Node.js的Web框架,提供了许多强大的功能,如路由、中间件、模板引擎等。而MongoDB则是一种流行的NoSQL数据库,可以轻松地存储大量数据,并且具有高可用性和可扩展性。 要实现一个管理后台,首先需要用Express来搭建应用程序。可以使用npm包管理器来安装所需的依赖,并使用模板引擎来渲染页面。同时,也可以使用Express提供的中间件来处理身份验证、文件上传、错误处理等问题。 在管理后台中,数据是至关重要的。这就是MongoDB的用武之地了。可以使用官方的MongoDB Node.js驱动程序或第三方ORM,如Mongoose等来连接数据库并执行CRUD操作。通过使用MongoDB,可以轻松地管理用户、文章、评论、订单等数据,并将其存储在一个集合中。 除了使用ExpressMongoDB以外,管理后台还可以通过使用其他有用的工具和技术来增强。例如: - 使用Bootstrap或其他CSS框架来创建漂亮的用户界面。 - 使用Webpack或Gulp等工具来优化前端资源。 - 使用Socket.IO来实时通信。 - 使用Passport.js或其他身份验证库来实现用户认证。 - 使用JWT或其他令牌库来实现安全的API访问。 总的来说,使用ExpressMongoDB可以轻松地创建一个功能强大的管理后台,它不仅可以管理数据,还可以提供良好的用户界面和安全的认证和授权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值