使用mongoose数据库项目

创建mongoose数据库项目

  一、搭建环境

      一、1 . 创建一个文件夹

         一、2 . 在文件夹的导航中输入cmd

        

   

 

      一、3 . 创建package.json

         在小黑框中输入 cnpm init  加回车  初始化一个package.json

        

       一、4.创建node_modules

        在小黑框中输入 cnpm i 加回车  创建一个node_modules文件夹

        

        一、5.创建public文件夹和package.json和node_modules文件夹同级创建

        

          创建public文件夹用于存放静态文件(如  js , css , html)

              一、6.创建tem文件夹用来来存放链接mongoose数据库的文件

      

                 一、7 . 创建routes文件夹用来存放对mongoose数据库中数据操作的js文件

      

             一、8.安装必要模块

        

          cnpm install body-parser --save

          cnpm install cookie-parser --save

        cnpm install multer --save

    二、搭建服务

          二、1.链接mongoose数据库

          二、1.(1)在tem文件夹下创建  mgs.js 文件(mgs是mongoose的缩写)

          

          

//链接mongoose数据库
//引入mongooose数据库 var mgs=require("mongoose")
//创建连接地址 var url="mongodb://127.0.0.1:27017/us2" //连接访问地址 mgs.connect(url)
//连接监听是否已经连接,如果已经连接启动时在小黑框中会有“芒果”字样 mgs.connection.on("connected",function(){console.log("芒果")}) //存入mongoose数据库中的数据格式 var type={ name:{type:String,default:"name"}, message:{type:String,default:"message"}, price:{type:Number,default:12} } //按格式存入数据库数据 var list=mgs.model("list",mgs.Schema(type)) //向外抛出list module.exports=list

          二、1.(2)在tem文件夹下再创建一个server.js文件,用来启动服务

  

//引入express
var express = require('express');
//引入path
var path = require('path');
//实例express为app
var app = express();

// view engine setup
//配置开发环境
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, '../public')));
//监听3000端口如果服务启动,在小黑框中会有“服务”字样
app.listen("3000",function(){console.log("服务")})

//向外抛出app
module.exports = app;

        二、2.(1)在public文件夹下创建image文件夹,用来存放项目中需要的图片

 

        二、2.(2)在public文件夹下创建javaScript文件夹,用来存放项目中需要的js文件

javaScript文件夹下的js文件

  

demo1.js文件内容

点击body判断是否删除

$(".con tbody").click((e)=>{
    var str=e.target.innerHTML
    var tr=$(e.target).parent().parent()
    var id=tr.attr("id")
    if(str=="删"){
        $('.active').css({display:"block"})
        $(".active").click((e)=>{
            var txt=e.target.innerHTML
            if(txt=="确定"){
                var obj={_id:id}
                $.get("/dele",obj,function(msg){
                    console.log(msg)
                    aa()
                    $('.active').css({display:"none"})
                })
            }else if(txt== "取消") {
                $('.active').css({display:"none"})
            }
        })
        
    }
})

  find1_render.js内容,判断一页几条信息,共分多少页内容

// ===================================================
var cur=1;
var msg=[] 
var mei=5;//每页五条
function renderOptions(len){//先计算再渲染
      // 计算有多少页
    pageN=Math.ceil(len/mei)//总页数除以每页条数=多少页
    // console.log(msg.length)
    var arr=new Array()
    for(var i=1;i<=pageN;i++){arr.push(i)}

    render2(arr)
}

// ===================================================
function render2(arr){
   $('.con .select').html(options(arr))
}
// ---------------总页数显示的下拉菜单
function options(arr){
  return arr.map(function(m,i){
    return '<li>'+m+'</li>'
  }).join('')
}
// ===============================
var obj_f=new Object();
function aa(){
  $.get('/find',obj_f,function(data){
    msg=data;
    renderOptions(msg.length)//计算和渲染页码
    renderPage(cur)//渲染页码
  })
}
aa()
function renderPage(cur){
  var part=msg.slice((cur-1)*mei,cur*mei);
  $('.con tbody').html(_html(part))
}
// ---------------
$('.con .select').click(function(e){
  var txt=e.target.innerHTML
 	

if(cur!=txt){
    cur=txt
    renderPage(cur)
}

})
//========================================
function prev(){
	if(cur==1){
		alert("已經是第一頁")
	}else{		
	cur--
	renderPage(cur)		
	}
}
function next(){
	if(cur==pageN){
		alert("已經是最後一頁")
	}else{		
	cur++
	renderPage(cur)
	}
}
//========================================
// ---------------把数据对应成html字串
function _html(data){
  var str=data.map(function(m,i){
    return `
        <tr id="${m._id}">
	         <td>${m.name}</td>
	         <td>${m.message}</td>
	         <td>${m.price}</td>
	         <td>
	         <button>删</button>
	         <button>改</button>
	         </td>
      	</tr>
    `
  }).join('')
  return str;
}
// ===================================================

  init.js文件是搜索和添加基本功能

   // 搜索
   $(".search button").click(()=>{
    ax()
 })
 $(Document).keydown(function(e){
     if(e.keyCode==13){
         ax()
     }
 })
 function ax(){
     obj_f={
         name:$(".search input").val()
     }
     aa()
 }
 // 添加
 $(".create button").click(()=>{
     var obj={
         name:$(".name").val(),
         message:$(".message").val(),
         price:$(".price").val()
     }
     $.get("/create",obj,function(msg){
         console.log(msg)
         aa()
     })

 })

  jq3.js是jquery3.js文件,项目依赖的js文件,在jquery官网下载的文件

  update.js是更新数据的操作,js文件,也是通过监听body中的点击事件判断

   // 搜索
   $(".search button").click(()=>{
    ax()
 })
 $(Document).keydown(function(e){
     if(e.keyCode==13){
         ax()
     }
 })
 function ax(){
     obj_f={
         name:$(".search input").val()
     }
     aa()
 }
 // 添加
 $(".create button").click(()=>{
     var obj={
         name:$(".name").val(),
         message:$(".message").val(),
         price:$(".price").val()
     }
     $.get("/create",obj,function(msg){
         console.log(msg)
         aa()
     })

 })

  

        二、2.(3)在public文件夹下创建stylesheets文件夹,用来存放项目中需要的css样式文件

 

通过scss编写的css样式,在stylesheets文件夹下创建css.scss文件

@charset "utf-8";
*{margin:0;padding:0;list-style: none;}

.active{
    width:100vw;
    height:100vh;
    position: fixed;
    background: rgba(0,0,0,0.5);
    display: none;
    div{
        width:300px;
        height:100px;
        margin:0 auto;
        background:#f2f2f2;
        text-align: center;
    }

}

.update{
    width:100vw;
    height:100vh;
    position: fixed;
    background:rgba(0,0,0,0.5);
    display: none;
    div{
        width:400px;
        height:500px;
        margin:0 auto;
        background:#f2f2f2;
    }
}

.select li{
    padding:5px 10px;
    border:1px solid #000;
}

  

        二、2.(4)在public文件夹下创建index.html文件,主页面

 

主页的布局

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="stylesheets/css.css">
    <style>
        li {
            list-style: none;
        }

        .con tbody tr td {
            text-align: center;
        }
    </style>
</head>

<body>

    <div class="active">
        <div>
            <p>确定要删除?</p>
            <p><button>确定</button><button>取消</button></p>
        </div>
    </div>

    <div class="update">
        <div>
            <p>name</p>
            <p><input type="text" class="name1"></p>
            <p>message</p>
            <p><input type="text" class="message1"></p>
            <p>price</p>
            <p><input type="text" class="price1"></p>
            <p><button>提交</button><button>取消</button></p>
        </div>
    </div>



    <div class="create">
        <p>name</p>
        <p><input type="text" class="name"></p>
        <p>message</p>
        <p><input type="text" class="message"></p>
        <p>price</p>
        <p><input type="text" class="price"></p>
        <p><button>提交</button></p>
    </div>

    <div class="show con">
        <p class="search"><input type="text"><button>搜索</button></p>
        <table border=1px width="800px" cellspacing=0>
            <thead>
                <tr>
                    <th>name</th>
                    <th>message</th>
                    <th>price</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>

            </tbody>
        </table>
        <div style="display: flex; width:500px ; justify-content: space-around;">
            <button onclick="prev()">prev</button>
            <ul class="select" style="display: flex; width:500px ; justify-content: space-around;">

            </ul>
            <button onclick="next()">next</button>
        </div>
    </div>



</body>
<script src="javascripts/jq3.js"></script>
<script src="javascripts/find1_render.js"></script>
<script src="javascripts/deno1.js"></script>
<script src="javascripts/update.js"></script>
<script src="javascripts/init.js"></script>
<script>
</script>

</html>

  二、3.(1)在routes文件夹下创建create.js文件,用来监听创建信息

      

var express = require('express');
var router = express.Router();
var list=require("../tem/mgs")

/* GET users listing. */
router.get('/', function(req, res, next) {
    list.create(req.query,function(err,result){
        if(err){console.log("创建失败")}
        else{
            res.send(result)
        }
    })
});

module.exports = router;

  二、3.(2)在routes文件夹下创建delete.js文件,用来监听删除数据的操作

var express = require('express');
var router = express.Router();
var list=require("../tem/mgs")

/* GET users listing. */
router.get('/', function(req, res, next) {
    list.deleteOne(req.query,function(err,result){
        if(err){console.log("创建失败")}
        else{
            res.send(result)
        }
    })
});

module.exports = router;

  二‘、3.(3)在routes文件夹下创建find.js文件,用来监听查询数据库的操作,查询用户数据

var express = require('express');
var router = express.Router();
var list=require("../tem/mgs")

/* GET home page. */
router.get('/', function(req, res, next) {
    if(req.query.name){
        list.find({name:new RegExp(req.query.name)},function(err,result){
            if(err){console.log("查寻失败")}
            else{
                res.send(result)
            }
        })
    }else{

        list.find({},function(err,result){
            if(err){console.log("查询失败")}
            else{
                res.send(result)
            }
        })
    }

});

module.exports = router;

  二‘、3.(4)在routes文件夹下创建find1.js文件,用来监听查询数据库的操作,判断是否有此用户

var express = require('express');
var router = express.Router();
var list=require("../tem/mgs")

/* GET users listing. */
router.get('/', function(req, res, next) {
    list.find(req.query,function(err,result){
        if(err){console.log("查询失败")}
        else{
            res.send(result)
        }
    })
});

module.exports = router;

  二、3.(5)在routes文件夹下创建update.js文件,用来监听更新数据的操作

var express = require('express');
var router = express.Router();
var list=require("../tem/mgs")

/* GET users listing. */
router.get('/', function(req, res, next) {
    // console.log(req.query)
    var id={_id:req.query.id}
    var obj={
        name:req.query.name,
        message:req.query.message,
        price:req.query.price
    }
    list.update(id,obj,function(err,result){
        if(err){console.log("更新失败")}
        else{
            res.send(result)
        }
    })
});

module.exports = router;

  

   二、4.创建app.js  和node_modules文件夹同级

         

          app.js文件中的内容

//导入服务
var app=require("./tem/server")
//接收请求地址 var find = require('./routes/find'); var create = require('./routes/create'); var dele = require('./routes/dele'); var find1 = require('./routes/find1'); var update = require('./routes/update'); //执行请求 app.use('/find', find); app.use('/create', create); app.use('/dele', dele); app.use('/find1', find1); app.use('/update', update);

  

    通过在当前项目根目录下小黑框中输入supervisor app.js加回车

项目就启动了

posted @ 2020-02-27 14:55  吴小恩  阅读(512)  评论(0编辑  收藏  举报