创建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加回车
项目就启动了