node.js - day03

29 阅读2分钟

一、mongo

mongo就是基于json的数据库,json就是JavaScript Object Notation

1.1 安装&启动

  • 打开bin文件夹,里面有:mongo.exe(客户端) 和 mongod.exe(服务器端)
  • 在bin文件夹中打开cmd:输入:.\mongod.exe --dbpath=你想要保存的绝对文件夹路径; - 服务器开启成功,而且那个文件夹就保存着你以后要存储的所有的数据
  • 不要关闭mongo服务器的cmd
  • 再打开一个cmd:输入:.\mongo.exe - 在上一个命令行可以查看我们是否链接成功 - 客户端开启成功

1.2 mongo的语法:都是在客户端cmd输入

  • 数据库的操作:
    1. 查询所有数据库:show dbs
    2. 创建/切换数据库:没有创建就是切换,use 数据库名称
    3. 查看当前选中的数据库:db
    4. 创建数据表:db.createCollection("表名")
    5. 删除数据表:db.dropDatabase()
  • 数据表的操作:
    1. 创建数据表:db.createCollection("表名",{size:5242880,capped:true,max:5000})最大存储空间为5mb,最多存储500个,意味着这个数据表做了限制,不推荐
    2. 查看目前所有的数据表:db.getCollectionNames();
    3. 删除数据表:db.表名.drop();
  • 数据的操作:
      • db.表名.save({键值对,...}) - 一次只能插入一条数据
      • db.表名.save([{},{},{},....]) - 一次插入多条数据
      • 举例:db.user.save([{name:"付楠",age:18,pwd:"666666",email:"fn@qq.com",vip:"0"},{name:"袍哥",age:19,pwd:"999999",email:"pg@qq.com",vip:"1"}])
    1. 删:
      • db.表名.remove({}) - 不推荐,删除数据库中所有的数据
      • db.表名.remove({name:"任小波"}) - 会删除数据库中name:"任小波"的所有数据
      • db.表名.update({条件},{$set:{新内容}});
      • 举例:db.表名.update({name:"任小波"},{$set:{pwd:"123123"}});
      • db.表名.find(); - 找所有
      • db.表名.find({pwd:"666666"}); - 找到所有的密码为666666的数据
      • db.表名.find({},{name:1,pwd:1}) - 找到所有的数据,但是只返回name和pwd
      • db.表名.find().sort({age:1}) - 按照age升序排列,-1为降序排列
      • db.表名.find({age:{$gte:18}}) - 拿到所有age大于等于18的数据
      • db.表名.find({name:/正则/}) - 甚至可以用正则(模糊查询)
      • db.表名.find().skip(5).limit(5) - 跳过前5条,再拿5条,理解为5-10条数据(第几个分页条显示第几条数据-第几条数据)
      • db.表名.find().count() - 获取到此表有多少条数据(做出分页条)

二、Node.js操作mongoDB

安装第三方模块:mongoose

2.1 使用步骤:

  • 引入
const mongoose = require('mongoose');
  • 连接数据库:mongoose.connect("mongodb://127.0.0.1/数据库名称");
  • 创建出一个新的数据表的同时,设置数据类型的控制,防止用户乱输
const UserSchema=mongoose.Schema({
        age: Number,
        pwd: String,
        email: String,
        vip: String,
        name: String,
})
//		模型名    类型限制     
var User=mongoose.model("User",UserSchema,"数据表名");
  • 增:
var x=new User({//仅仅只是创建出了一个x对象,并没有放入到数据库之中
        age: "20",
        pwd: "123123",
        email: "dy@qq.com",
        vip: "0",
        name: "dy",
})
x.save((err)=>{
        console.log("新增成功后要干什么");
})
  • 删:
User.remove/deleteOne/deleteMany({条件},(err)=>{// - 作者不推荐remove在mongoose之中使用
        console.log("删除成功后要干什么");
})
  • 改:
User.update/updateOne/updateMany({条件},{新内容},(err)=>{// - 作者不推荐update在mongoose之中使用
        console.log("修改成功后要干什么");
})
  • 查:
User.find({条件},(err,result)=>{
        result就是你的查找到的结果
})

三、练习

const mongoose = require('mongoose');//引入
// console.log(mongoose);
mongoose.connect('mongodb://127.0.0.1/h52301');//链接数据库
// 创建出新的数据表得到同时,设置数据类型的控制,防止用户乱输   不会限制用户的输入内容 但是传入数据库会自动变
const userSchema = mongoose.Schema({
    name:String,
    pwd:String,
    email:String ,
    vip:Number,
})
// User模型名  userSchema限制类型   user数据表名
var User = mongoose.model("User",userSchema,'user');
// 增
/* var x = new User({//仅仅只是创建了一个x对象,并没有放到数据库中
    name:'张三',
    pwd:'666',
    email:'zh@qq.com',
    vip:'2',
})
// console.log(x);
x.save((err)=>{//异步
    // console.log(err);
    console.log('新增成功!');
}) */
// 删
/* User.deleteOne({name:'张三'},(err)=>{
    console.log('删除成功');
}) */
/* User.deleteMany({vip:2},(err)=>{
    console.log('删除成功!');
}) */
// 改
/* User.updateOne({vip:2},{vip:1},(err)=>{
    console.log('修改成功!');
}) */
// 查
/* User.find({vip:1},{name:1,pwd:1,_id:0},(err,result)=>{
    console.log(result);//查询结果
}) */
// 跳过前两条 再拿3条
User.find({},(err,result)=>{
    console.log(result);
}).skip(2).limit(3)
var url = require("url");
var fs = require("fs");
// 创建服务器并且设置端口号为8008
var http = require("http");
var app = http.createServer();
app.listen(8008);
// 连接数据库
var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/h52301");
//创建数据表并且限制类型
const userSchema = mongoose.Schema({
    name:String,
    pwd:String,
    email:String,
    vip:Number,
});
// mongoose.model(参数1:模型名称(首字母大写), 参数2:Schema,参数3:数据库集合名称)
var User = mongoose.model("User",userSchema,"user");

// 绑定请求事件
app.on("request",(req,res) => {
    // console.log(req.url);//得到的是路由和请求消息
    var objUrl = url.parse(req.url,true);
    // console.log(objUrl);
    var router = objUrl.pathname;//路由
    console.log(router);
    if (router == '/' || router == "/index.html") {
        fs.readFile("./public/html/index.html",(err,buf) => {
            // console.log(err);
            res.end(buf);
        })
    } else if (router.match(/html/) !== null) {
        fs.readFile(`./public/html/${router}`,(err,buf) => {
            res.end(buf);
        })
    } else if (router == "/register") {
        // 增 注册
        User.find({},{name:1,_id:0},(err,result) => {
            /* console.log(result);//拿到数据库表的所有name
            [
                { name: '张黎' },
                { name: '刘洋' },
                { name: '杨念' },
                { name: '舒锦' },
                { name: '李莉' },
                { name: '张三' },
                { name: '李四' }
              ] */
            for (var i = 0; i < result.length; i++) {
                // 判断名字 result[i].name数据库表中的名字  objUrl.query.name前端传来的名字
                if (result[i].name == objUrl.query.name) {
                    res.end("<html><head><meta charset='utf-8'></head><body><script>sessionStorage.state='注册失败';location='status.html';</script></body></html>")
                    return false;
                }
            }
            // 注册
            /* var x = new User({//仅仅只是创建了一个x对象,并没有放到数据库中
                name:objUrl.query.name,
                pwd:objUrl.query.pwd,
                email:objUrl.query.email,
                vip:objUrl.query.vip,
            }) */
            var x = new User(objUrl.query);
            // console.log(x);
            x.save((err)=>{//异步
                res.end("<html><head><meta charset='utf-8'></head><body><script>sessionStorage.state='注册成功';location='status.html';</script></body></html>")
            }) 
        })
    } else if (router == "/login") {
        // 查 登录
        User.find({},{name:1,pwd:1,_id:0},(err,result) => {
            for (var i = 0; i < result.length; i++) {
                if (result[i].name == objUrl.query.name && result[i].pwd == objUrl.query.pwd) {
                    res.end("<html><head><meta charset='utf-8'></head><body><script>sessionStorage.state='登录成功';location='status.html';</script></body></html>")
                    return false;
                }
            }
            res.end("<html><head><meta charset='utf-8'></head><body><script>sessionStorage.state='登录失败';location='status.html';</script></body></html>")
        })
    } else if (router == "/updatePwd") {
        // 修改密码
        User.find({},{name:1,pwd:1,_id:0},(err,result) => {
            for (var i = 0; i < result.length; i++) {
                if (result[i].name == objUrl.query.name && result[i].pwd == objUrl.query.pwd) {
                    User.updateOne({name:objUrl.query.name},{pwd:objUrl.query.newpwd},(err) => {
                        res.end("<html><head><meta charset='utf-8'></head><body><script>sessionStorage.state='修改成功';location='status.html';</script></body></html>")
                    })
                    return false;
                }
            }
            res.end("<html><head><meta charset='utf-8'></head><body><script>sessionStorage.state='修改失败';location='status.html';</script></body></html>")
        })
    } else if (router == "/logout") {
        // 注销  删除
        User.find({},{name:1,pwd:1,_id:0},(err,result) => {
            for (var i = 0; i < result.length; i++) {
                if (result[i].name == objUrl.query.name && result[i].pwd == objUrl.query.pwd) {
                    User.deleteOne({name:objUrl.query.name},(err) => {
                        res.end("<html><head><meta charset='utf-8'></head><body><script>sessionStorage.state='注销成功';location='status.html';</script></body></html>")
                    })
                    return false
                }
            }
            res.end("<html><head><meta charset='utf-8'></head><body><script>sessionStorage.state='注销失败';location='status.html';</script></body></html>")
        })
    }
})