mongodb 数据库学习笔记(二) 2020.12.28

自定义前后端及 mongodb数据库,并封装dao(增删改查操作)

文件路径结构

|——qemo
    |——node_modules
    |——www
    	|——from
    		|——index.html
   |——model
   			|——dao.js
   |——package.json
   |——text-mongodb02.js

index.html 前端页面(不含样式):

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Document</title>
	</head>
	<body>
		<h1>简易用户页面</h1>
		<h3>GET注册-增</h3>
		<form action="http://localhost:8989/addDataGET">
			<input type="text" placeholder="请输入用户名" name="name">
			<input type="password" placeholder="请输入密码" name="pass">
			<input type="submit">
		</form>
		<hr>

		<h3>POST注册-增</h3>
		<form action="http://localhost:8989/addData" method="post">
			<input type="text" placeholder="请输入用户名" name="name">
			<input type="password" placeholder="请输入密码" name="pass">
			<input type="submit">
		</form>
		<hr>

		<h3>GET登录-查</h3>
		<form action="http://localhost:8989/searchData">
			<input type="text" placeholder="请输入用户名" name="name">
			<input type="password" placeholder="请输入密码" name="pass">
			<input type="submit">
		</form>
		<hr>

		<h3>查询所有数据</h3>
		<form action="http://localhost:8989/searchAllData">
			<input type="text" placeholder="请输入用户名" name="name">
			<input type="password" placeholder="请输入密码" name="pass">
			<input type="submit">
		</form>
		<hr>

		<h3>GET修改信息-改</h3>
		<form action="http://localhost:8989/updateData">
			<input type="text" placeholder="请输入用户名" name="name">
			<input type="password" placeholder="请输入密码" name="pass">
			<input type="password" placeholder="请重新输入新密码" name="newpass">
			<input type="submit">
		</form>
		<hr>

		<h3>GET删除信息-删</h3>
		<form action="http://localhost:8989/deleteData">
			<input type="text" placeholder="请输入用户名" name="name">
			<input type="password" placeholder="请输入密码" name="pass">
			<input type="submit">
		</form>
	</body>
</html>

text-mongodb02.js 自定义本地Node express后台

const express = require('express');
const app = express();
const dao = require('./model/dao');
const md5 = require('md5');// md5加密 一般进行多层加密 一般是2-3层

// 引入处理post参数的模块
var bodyParser = require('body-parser')
var urlencodedParser = bodyParser.urlencoded({extended: false})

app.use('/', express.static('./www/form'));//呈递静态资源

// 增加数据 post请求并加密
app.post('/addData', urlencodedParser, (req, res) => {//req 请求, res 响应
  var myobj = {name: req.body.name, pass: md5(req.body.pass)};
  console.log('POST 请求');
  dao.insert(myobj, res, (r) => {
    res.send(r);//成功插入的数据信息
  });
})

// 增加数据 get请求
app.get('/addDataGET', (req, res) => {//req 请求, res 响应
  var myobj = {name: req.query.name, pass: req.query.pass};
  console.log('GET 请求');
  dao.insert(myobj, res, (r) => {
    res.send(r);//成功插入的数据信息
  });
})

//删除数据
app.get('/deleteData', (req, res) => {
  var deleteobj = {name: req.query.name, pass: req.query.pass};
  console.log(deleteobj);
  dao.delete(deleteobj, res, (r) => {
    res.send(r);//成功删除的数据信息
  });
})

//修改数据
app.get('/updateData', (req, res) => {
  var oldData = {name: req.query.name, pass: req.query.pass};
  var newData = {$set: {pass: req.query.newpass}};
  console.log(oldData);
  console.log(newData);
  dao.update(oldData, newData, res, (r) => {
    res.send(r);//成功修改的数据信息
  });
})

//查询数据
app.get('/searchData', (req, res) => {
  var myobj = {name: req.query.name, pass: req.query.pass};
  console.log(myobj);
  dao.search(myobj, res, (r) => {
    res.send(r);//成功插入的数据信息
  });
})

//查询所有数据
app.get('/searchAllData', (req, res) => {
  var myobj = {name: req.query.name, pass: req.query.pass};
  dao.searchAll(myobj, res, (r) => {
    res.send(r);//成功插入的数据信息
  });
})

//监听端口
app.listen('8989');

dao.js 封装 mongodb 数据库增删改查操作

//数据库操作
//module.exports 导出数据
var MongoClient = require('mongodb').MongoClient;//引入数据库
var url = "mongodb://localhost:27017/runoob";//数据库地址

/**
 * 链接数据库
 * 链接数据库是异步操作,不清楚什么时候链接成功,所以用到回调函数的方式
 * @param callback 数据库操作
 */
function _connect(callback) {
  MongoClient.connect(url, function (err, db) {//db 数据库链接成功后返回的数据
    //数据库链接成功
    if (err) throw err;
    //执行传入的回调方法中的数据库操作
    callback(db);
  });
}

/**
 * 增加数据
 * @param myobj 需要插入的数据
 * @param res
 * @param callback
 */
module.exports.insert = function (myobj, res, callback) {
  _connect((db) => {//db,链接成功的数据
    var dbo = db.db("students");//创建或链接,当前操作的数据库 db.db("操作的数据库")
    if (myobj instanceof Array) {
      myobj = myobj;
    } else {
      myobj = [myobj];
    }
    //insertOne 插入一条数据 myobj || insertMany 插入多条数据是数组 [myobj]
    dbo.collection("stu3").insertMany(myobj, function (err, r) { //dbo数据库.collection("操作的集合").insertOne(插入的一条数据内容,(err,r)=>{})
      if (err) throw err;
      console.log("文档插入成功");//后台打印
      db.close();
      callback(r);//参数 r : 成功插入的数据信息
    });
  })
}

/**
 * 删除数据
 * @param res
 * @param callback
 */
module.exports.delete = function (deleteobj, res, callback) {
  _connect(function (db) {
    var dbo = db.db("students");
    dbo.collection("stu3").deleteMany(deleteobj, function (err, r) {
      // 返回集合中所有数据
      if (err) throw err;
      console.log('内容已删除...');//后台打印
      db.close();
      callback(r);
    });
  })
}

/**
 * 修改数据
 * @param res
 * @param callback
 */
module.exports.update = function (oldData, newData, res, callback) {
  _connect(function (db) {
    var dbo = db.db("students");
    dbo.collection("stu3").updateMany(oldData, newData, function (err, r) {
      // 返回集合中所有数据
      if (err) throw err;
      console.log('查询的内容已为您修改...');//后台打印
      db.close();
      callback(r);
    });
  })
}

/**
 * 查询数据
 * @param res
 * @param callback
 */
module.exports.search = function (myobj, res, callback) {
  _connect((db) => {
    var dbo = db.db("students");//创建或链接,当前操作的数据库
    dbo.collection("stu3").find(myobj).toArray(function (err, r) { // 返回集合中所有数据
      if (err) throw err;
      console.log('已帮你查询到匹配数据!');//后台打印
      db.close();
      callback(r);
    });
  })
}

/**
 * 查询所有数据
 * @param res
 * @param callback
 */
module.exports.searchAll = function (myobj, res, callback) {
  _connect((db) => {
    var dbo = db.db("students");//创建或链接,当前操作的数据库
    dbo.collection("stu3").find({}).toArray(function (err, r) { // 返回集合中所有数据
      if (err) throw err;
      console.log('已查询到全部数据...');//后台打印
      db.close();
      callback(r);
    });
  })
}
上一篇:JS | freecodecamp刷题第一天


下一篇:源码笔记:Object类方法-clone()