• 使用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{
        100vw;
        height:100vh;
        position: fixed;
        background: rgba(0,0,0,0.5);
        display: none;
        div{
            300px;
            height:100px;
            margin:0 auto;
            background:#f2f2f2;
            text-align: center;
        }
    
    }
    
    .update{
        100vw;
        height:100vh;
        position: fixed;
        background:rgba(0,0,0,0.5);
        display: none;
        div{
            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; 500px ; justify-content: space-around;">
                <button onclick="prev()">prev</button>
                <ul class="select" style="display: flex; 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加回车

    项目就启动了

  • 相关阅读:
    html实体引用
    nginx配置奇怪问题记录
    20191025-生产事故记录
    abp审计日志功能的关闭
    mysql根据一张表更新另一张表数据
    redis-cli连接redis服务器操作
    错误记录-MySql.Data.MySqlClient.MySqlException (0x80004005): Timeout expired.
    UID,GID,口令
    【搬砖】/etc/passwd 文件结构
    《图形学》实验五:改进的Bresenham算法画直线
  • 原文地址:https://www.cnblogs.com/xiaobu-wu/p/12371494.html
Copyright © 2020-2023  润新知