文件目录
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210104200739991.png#pic_center)
数据库 db.js
var mongodb = require('mongodb'); // 引入mongodb
var MongoClient = mongodb.MongoClient;
var dbUrl = "mongodb://localhost:27017"; // 数据库的地址及端口
var dbName = "myFiult"; // 库名
// 连接数据库
function connectMGDB(cb, res) {
MongoClient.connect(dbUrl, {useNewUrlParser: true}, function(err, db) {
// console.log('db==========', db);
if(err) {
console.log("数据库连接失败:", err);
res.send({error: 1}); // 数据库连接失败
} else {
console.log("数据库连接成功");
// 关联数据库
var dbase = db.db(dbName);
// 进行增删改查操作
cb(dbase, db);
}
})
}
// 插入方法
module.exports.insert = function(res, cName, obj, cb) {
connectMGDB(function(dbase, db) {
dbase.collection(cName).insert(obj, function(err, result) {
cb(err, result, db);
})
}, res)
}
// 查询方法
module.exports.find = function(res, cName, whereObj, cb) {
connectMGDB(function(dbase, db) {
whereObj.find ? whereObj.find : whereObj.find = {}; // whereObj对象中有find属性 则执行whereObj.find
whereObj.sort ? whereObj.sort : whereObj.sort = {};
whereObj.limit ? whereObj.limit : whereObj.limit = 0;
whereObj.skip ? whereObj.skip : whereObj.skip = 0;
// 查询 age>16 的数据 跳过3条数据 显示3条数据
dbase.collection(cName).find().count().then(function(count) { // 查询当前数据总量
dbase.collection(cName).find(whereObj.find).limit(whereObj.limit)
.skip(whereObj.skip).collation({"locale": "zh", numericOrdering:true}).sort(whereObj.sort).toArray(function(err, result) { // 根据查询条件返回对应数据
cb(err, result, db, count);
})
})
}, res);
}
// 删除方法
module.exports.delete = function(res, cName, obj, cb) {
connectMGDB(function(dbase, db) {
dbase.collection(cName).deleteMany(obj, function(err, result) {
cb(err, result, db)
})
}, res);
}
// 修改方法
module.exports.update = function(res, cName, whereObj, updatePbj, cb) {
connectMGDB(function(dbase, db) {
dbase.collection(cName).updateOne(whereObj, updatePbj, function(err, result) {
cb(err, result, db)
})
}, res);
}
首页
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="css/new_file.css"/>
<script src="js/jquery-3.2.1.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<h1>华联超市</h1>
<a href="http://127.0.0.1:3000/hd/hd.html" style="margin-left: 20px;">录入商品</a> 
<a href="http://127.0.0.1:3000/qd/qd.html">前台展示</a>
</body>
<script src="js/new_file.js" type="text/javascript" charset="utf-8"></script>
</html>
new_file.css
*{
margin: 0;
padding: 0;
}
h1{
margin-left: 20px;
line-height: 60px;
}
a{
color: blue;
}
录入商品页
hd.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="hd.css"/>
<script src="../js/jquery-3.2.1.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<h1>商品录入</h1>
<p>
图片地址:<input type="text" class="img"/> 
商品名称:<input type="text" class="name"/>
</p>
<p>
商品价格:<input type="text" class="many"/> 
商品种类: <select class="class">
<option value="冰箱" selected="selected">冰箱</option>
<option value="电脑">电脑</option>
<option value="手机">手机</option>
</select>
</p>
<p>
<button type="button" class="add">添加</button>
</p>
<p>
名称:<input type="text" class="names"/> 
价格:<input type="text" class="manys"/> 
<button type="button" class="ss">搜索</button>
</p>
<p class="ts yc" style="color: red;">名称/价格不能都为空</p>
<p class="button">
<button type="button" selected class="alls color">全部</button> 
<button type="button" class="bx">冰箱</button> 
<button type="button" class="dn">电脑</button> 
<button type="button" class="sj">手机</button>
<input type="text" class="save yc"/>
</p>
<table border="1" cellspacing="0" cellpadding="0">
<thead>
<tr>
<th>图片</th>
<th>名称</th>
<th>价格</th>
<th>种类</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<!--<tr>
<td>
<img src="../imgs/${arr[i].img}.jpg"/>
</td>
<td>${arr[i].name}</td>
<td>${arr[i].many}</td>
<td>${arr[i].classs}</td>
<td>
<a href="javascript:void(0)" onclick=del('${arr[i]._id}')>删除</a> 
<a href="javascript:void(0)" class="xg">修改</a>
</td>
</tr>-->
</tbody>
</table>
</body>
<script src="hd.js" type="text/javascript" charset="utf-8"></script>
</html>
hd.css
*{
margin: 0;
padding: 0;
text-decoration: none;
outline: none;
}
body{
padding-left: 20px;
}
h1{
line-height: 60px;
}
p{
margin-bottom: 5px;
}
button{
padding: 1px 10px;
}
table{
width: 600px;
line-height: 24px;
text-align: center;
}
img{
margin-top:5px ;
width: 80px;
height: 80px;
}
a{
color: #000000;
}
.yc{
display: none;
}
.color{
color: red;
}
hd.js
//首屏渲染
show()
//添加
$('.add').click(function(){
if ($('.img').val()==''||$('.name').val()==''||$('.many').val()=='') {
alert('不能为空')
} else{
var obj = {
img:$('.img').val(),
name:$('.name').val(),
many:$('.many').val(),
classs:$('.class').val()
}
$.ajax({
type:"post",
url:"/addPost",
async:true,
data:obj,
success:function(res){
show()
}
});
}
$('.img').val('')
$('.name').val('')
$('.many').val('')
var str = `
<option value="冰箱" selected="selected">冰箱</option>
<option value="电脑">电脑</option>
<option value="手机">手机</option>`
$('select').html(str)
})
//渲染1
function show(){
$.ajax({
type:"get",
url:"/getContent",
success:function(res){
if (res.length==0) {
$('table').hide()
$('.button').hide()
} else{
showDom(res)
$('table').show()
$('.button').show()
}
}
});
}
//渲染2
function showDom(arr){
var str = ''
for (var i = 0; i < arr.length; i++) {
str += `
<tr>
<td>
<img src="../imgs/${arr[i].img}.jpg"/>
</td>
<td>${arr[i].name}</td>
<td>${arr[i].many}</td>
<td>${arr[i].classs}</td>
<td>
<a href="javascript:void(0)" onclick=del('${arr[i]._id}')>删除</a> 
<a href="javascript:void(0)" onclick=xg(${JSON.stringify(arr[i])},this)>修改</a>
</td>
</tr>
`}
$('tbody').html(str)
}
//删除
function del(myid){
var obj = {
id:myid
}
$.ajax({
type:"post",
url:"/delePost",
async:true,
data:obj,
success:function(res){
$('.button>button').eq(0).addClass('color').siblings().removeClass('color')
show()
}
});
}
//修改
function xg(obj,a){
if ($(a).html() == '修改') {
$('.img').val(obj.img)
$('.name').val(obj.name)
$('.many').val(obj.many)
$('.class').val(obj.classs)
$('.save').val(obj._id)
$(a).html('完成修改')
} else{
$(a).html('修改')
var obj = {
img:$('.img').val(),
name:$('.name').val(),
many:$('.many').val(),
classs:$('.class').val(),
id:$('.save').val()
}
$.ajax({
type:"post",
url:"/updatePost",
async:true,
data:obj,
success:function(res){
show()
$('.img').val('')
$('.name').val('')
$('.many').val('')
var str = `
<option value="冰箱" selected="selected">冰箱</option>
<option value="电脑">电脑</option>
<option value="手机">手机</option>`
$('select').html(str)
}
});
}
}
//搜索
$('.ss').click(function(){
var obj
if ($('.names').val()==''&&$('.manys').val()=='') {
$('.ts').slideDown().delay(1000).slideUp()
} else if($('.names').val()==''&&$('.manys').val()!=''){
obj = {
many:$('.manys').val()
}
} else if($('.names').val()!=''&&$('.manys').val()==''){
obj = {
name:$('.names').val()
}
} else if($('.names').val()!=''&&$('.manys').val()!=''){
obj = {
many:$('.manys').val(),
name:$('.names').val()
}
}
$.ajax({
type:"post",
url:"/tabData",
async:true,
data:obj,
success:function(res){
if (res.length==0) {
$('table').hide()
$('.button').hide()
} else{
showDom(res)
$('table').show()
$('.button').show()
}
}
});
$('.manys').val('')
$('.names').val('')
})
//分类
$('.button>button').click(function(){
var index = $(this).index()
$(this).addClass('color').siblings().removeClass('color')
if ($(this).html()=='全部') {
show()
} else{
var obj = {
classs:$(this).html()
}
$.ajax({
type:"post",
url:"/tabData",
data:obj,
success:function(res){
if (res.length==0) {
$('table').hide()
} else{
showDom(res)
$('table').show()
}
}
});
}
})
前台展示页
qd.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="qd.css"/>
<script src="../js/jquery-3.2.1.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<h1>华联超市商品购买中心</h1>
<p>
<button type="button" class="color">首页</button>
<button type="button">购物车</button>
</p>
<div class="box">
<div>
<ul type="none" class="ul1">
<!-- <li>
<img src="../imgs/${arr[i].img}.jpg" alt="">
<span>${arr[i].name} ${arr[i].many}</span>
<button bid="${arr[i]._id}" type="button" onclick="add()">加入购物车</button>
</li> -->
</ul>
<h1>加入成功</h1>
</div>
<ul type="none" class="ul2 yc">
<!-- <li>
<img src="../imgs/${arr[i].img}.jpg" alt="">
<span>${arr[i].name} ${arr[i].many}</span>
<button bid="${arr[i]._id}" type="button" onclick="jian()">-</button>
<input type="text" value="{arr[i].sl">
<button bid="${arr[i]._id}" type="button" onclick="jia()">+</button>
</li> -->
</ul>
</div>
</body>
<script src="qd.js" type="text/javascript" charset="utf-8"></script>
</html>
qd.css
*{
margin: 0;
padding: 0;
text-decoration: none;
outline: none;
}
body{
padding-left: 20px;
}
h1{
line-height: 60px;
}
body>p{
margin-bottom: 10px;
}
.color{
color: red;
}
.yc{
display: none;
}
.box>div>h1{
color: red;
display: none;
}
ul>li{
margin-bottom: 10px;
border: 1px solid red;
width: 500px;
height: 100px;
}
ul>li>img{
width: 90px;
height: 90px;
margin: 5px;
vertical-align: middle;
}
ul>li>span{
border: 0px;
}
.ul2>li>button{
width: 16px;
}
qd.js
//首屏渲染
show()
show1()
//tog切换
$('body>p>button').click(function(){
$(this).addClass('color').siblings().removeClass('color')
var index = $(this).index()
$('.box').children().eq(index).show().siblings().hide()
})
//首页获取数据
function show(){
$.ajax({
type:'get',
url:'/getContent',
success:function(res){
showDom(res)
}
})
}
//首页渲染数据
function showDom(arr){
var str = ''
for (let i = 0; i < arr.length; i++) {
str+=
`<li>
<img src="../imgs/${arr[i].img}.jpg" alt="">
<span>${arr[i].name} ${arr[i].many}</span>
<button bname="${arr[i].name}" bid="${arr[i]._id}" type="button" onclick="add(this)">加入购物车</button>
</li>`
}
$('.ul1').html(str)
}
//首页点击加入购物车
var sl=1
function add(a){
var name = $(a).attr('bname')
var id = $(a).attr('bid')
//查找
$.ajax({
type:'post',
url:'/tab',
data:{
name:name
},
success:function(res){
if (res.length == 0) {
$.ajax({
type:'post',
url:'/tabData',
data:{
_id:id
},
success:function(res){
var obj = {
name:res[0].name,
many:res[0].many,
sl:sl,
img:res[0].img
}
$.ajax({
type:'post',
url:'/add',
data:obj,
success:function(res){
show1()
}
})
}
})
} else {
$.ajax({
type:'post',
url:'/tab',
data:{
name:name
},
success:function(res){
sl = res[0].sl - 0 + 1
var id = res[0]._id
$.ajax({
type:'post',
url:'/update',
data:{
id:id,
sl:sl
},
success:function(res){
show1()
}
});
}
})
}
}
});
$('.box>div>h1').slideDown(500).delay(1000).slideUp(500)
}
//购物车获取数据
function show1(){
$.ajax({
type:'get',
url:'/content',
success:function(res){
showDom1(res)
}
});
}
//购物车渲染
function showDom1(arr){
var str = ''
for (let i = 0; i < arr.length; i++) {
str +=
`<li>
<img src="../imgs/${arr[i].img}.jpg" alt="">
<span>${arr[i].name} ${arr[i].many}</span>
<button bid="${arr[i]._id}" type="button" onclick="jian(this)">-</button>
<span>${arr[i].sl}</span>
<button bid="${arr[i]._id}" type="button" onclick="jia(this)">+</button>
</li>`
}
$('.ul2').html(str)
}
//购物车+功能
function jia(a){
var id = $(a).attr('bid')
var sl = $(a).siblings('span').eq(1).html()-0+1
$.ajax({
type:'post',
url:'/update',
data:{
id:id,
sl:sl
},
success:function(res){
show1()
}
});
}
//购物车-功能
function jian(a){
var id = $(a).attr('bid')
var sl = $(a).siblings('span').eq(1).html()-0-1
if (sl==0) {
$.ajax({
type:'post',
url:'/dele',
data:{
id:id
},
success:function(res){
show1()
}
});
} else {
$.ajax({
type:'post',
url:'/update',
data:{
id:id,
sl:sl
},
success:function(res){
show1()
}
});
}
}
后台文件 index.js
// 写录入系统的接口
var express = require('express');
var router = express.Router();
// 引入数据库
var db = require('../modules/db.js');
console.log("db:", db);
// 引入mongodb 解决id问题
var mongodb = require('mongodb');
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({extended: false});
//cors跨域
router.use("*", function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header("Access-Control-Allow-Methods", "*");
res.header("Access-Control-Allow-Headers", "*");
next();
});
/* GET users listing. */
router.get('/', function(req, res, next) {
//res.render('index', { title: 'Express' });
res.sendFile(__dirname+'/index.html');
res.sendFile(__dirname+'/qd/qd.html');
res.sendFile(__dirname+'/hd/hd.html');
});
//添加
router.post('/addPost', urlencodedParser, function(req, res) {
var obj = req.body;
console.log("obj:", obj);
db.insert(res, "shoppingListX", obj, function(err, result, db) {
if(err) {
console.log("数据存入失败:", err);
res.send({error: 2});
} else {
console.log("数据存入成功");
res.send(result.result);
db.close();
}
})
});
// 渲染
router.get('/getContent', function(req, res) {
var obj = req.query;
console.log("obj:", obj);
db.find(res, "shoppingListX", obj, function(err, result, db) {
if(err) {
console.log("数据查询失败:", err);
res.send({error: 2});
} else {
console.log("数据查询成功");
res.send(result);
db.close();
}
})
});
// 删除接口 delePost
router.post('/delePost', urlencodedParser, function(req, res) {
var obj = req.body;
var key = Object.keys(obj)[0];
var id = mongodb.ObjectId(obj[key]);
var data = {
_id: id
}
db.delete(res, "shoppingListX", data, function(err, result, db) {
if(err) {
console.log("数据删除失败:", err);
res.send({error: 2});
} else {
console.log("数据删除成功");
res.send(result.result);
db.close();
}
})
});
// 修改
router.post("/updatePost", urlencodedParser, function(req, res) {
var data = req.body;
// console.log("data:", data);
var id = mongodb.ObjectId(data.id);
data.shopPrice = data.shopPrice - 0;
// 修改 条件 修改后的数据
var whereObj = {
_id: id
}
var updateObj = {
$set: data
}
db.update(res, "shoppingListX", whereObj, updateObj, function(err, result, db) {
if(err) {
console.log("数据修改失败:", err);
res.send({error: 2});
} else {
console.log("数据修改成功");
res.send(result.result);
db.close();
}
})
});
// 搜索
router.post('/tabData', urlencodedParser, function(req, res) {
var obj = req.body;
// console.log("obj:", obj);
if(obj._id){
obj._id = mongodb.ObjectId(obj._id);
}
var whereObj = {
find: obj
}
db.find(res, "shoppingListX", whereObj, function(err, result, db) {
if(err) {
console.log("数据查找失败:", err);
res.send({error: 2});
} else {
res.send(result);
db.close();
}
})
});
// 排序
router.post('/sortPost', urlencodedParser, function(req, res) {
var obj = req.body;
var key = Object.keys(obj)[0];
// console.log("obj:", obj)
obj[key] ? obj[key] = obj[key] - 0 : "";
var whereObj = {
sort: obj
}
db.find(res, "shoppingListX", whereObj, function(err, result, db) {
if(err) {
console.log("数据查找失败:", err);
res.send({error: 2});
} else {
res.send(result);
db.close();
}
})
})
//全部删除
router.post('/alldelPost', urlencodedParser, function(req, res) {
var obj ={}
db.delete(res, "shoppingListX", obj, function(err, result, db) {
if(err) {
console.log("数据删除失败:", err);
res.send({error: 2});
} else {
console.log("数据删除成功");
res.send(result.result);
db.close();
}
})
});
// 分页
router.post('/fyData', urlencodedParser, function(req, res) {
var obj = req.body;
// console.log("obj:", obj);
var whereObj = {
limit:Number(obj.limit),
skip:Number(obj.skip)
}
console.log("whereObj::::::::::",whereObj)
db.find(res, "shoppingListX", whereObj, function(err, result, db) {
if(err) {
console.log("数据查找失败:", err);
res.send({error: 2});
} else {
res.send(result);
db.close();
}
})
});
//添加
router.post('/add', urlencodedParser, function(req, res) {
var obj = req.body;
console.log("obj:", obj);
db.insert(res, "shoppingListY", obj, function(err, result, db) {
if(err) {
console.log("数据存入失败:", err);
res.send({error: 2});
} else {
console.log("数据存入成功");
res.send(result.result);
db.close();
}
})
});
// 渲染
router.get('/content', function(req, res) {
var obj = req.query;
console.log("obj:", obj);
db.find(res, "shoppingListY", obj, function(err, result, db) {
if(err) {
console.log("数据查询失败:", err);
res.send({error: 2});
} else {
console.log("数据查询成功");
res.send(result);
db.close();
}
})
});
// 删除接口 delePost
router.post('/dele', urlencodedParser, function(req, res) {
var obj = req.body;
var key = Object.keys(obj)[0];
var id = mongodb.ObjectId(obj[key]);
var data = {
_id: id
}
db.delete(res, "shoppingListY", data, function(err, result, db) {
if(err) {
console.log("数据删除失败:", err);
res.send({error: 2});
} else {
console.log("数据删除成功");
res.send(result.result);
db.close();
}
})
});
// 修改
router.post("/update", urlencodedParser, function(req, res) {
var data = req.body;
// console.log("data:", data);
var id = mongodb.ObjectId(data.id);
data.shopPrice = data.shopPrice - 0;
// 修改 条件 修改后的数据
var whereObj = {
_id: id
}
var updateObj = {
$set: data
}
db.update(res, "shoppingListY", whereObj, updateObj, function(err, result, db) {
if(err) {
console.log("数据修改失败:", err);
res.send({error: 2});
} else {
console.log("数据修改成功");
res.send(result.result);
db.close();
}
})
});
// 搜索
router.post('/tab', urlencodedParser, function(req, res) {
var obj = req.body;
// console.log("obj:", obj);
if(obj._id){
obj._id = mongodb.ObjectId(obj._id);
}
var whereObj = {
find: obj
}
db.find(res, "shoppingListY", whereObj, function(err, result, db) {
if(err) {
console.log("数据查找失败:", err);
res.send({error: 2});
} else {
res.send(result);
db.close();
}
})
});
module.exports = router;