Node基础篇(二)

Node与MySQL

SQL——4大语句
增 INSERT
  INSERT INTO <表> (字段, ...) VALUES(值, ...);
  INSERT INTO user_table (username, password) VALUES('lisi', '111111');

删 DELETE
  DELETE FROM <表> WHERE 条件;
  DELETE FROM user_table WHERE ID=2;

改 UPDATE
  UPDATE <表> SET 字段=新值,字段=新值,... WHERE 条件;
  UPDATE user_table SET password='654321', username='blue2' WHERE ID=1;

查 SELECT
  SELECT 字段列表 FROM <表> WHERE 条件 ORDER BY 字段 LIMIT 30,30;复制代码

Node操作MySQL

npm i mysql
npm i  co-mysql
复制代码

const http = require('http');
const mysql = require('mysql');
const co = require('co-mysql');
const url = require('url');

/*
* 1、创建连接池
* 2、mysql操作语句异步化
*/
let conn = mysql.createPool({host: 'localhost', user: 'xxx', password: '', database: 'xxx'});
let db = co(conn);
http.reateServer((req,res)=>{
    let {pathname,query} = url.parse(req,true);
    let username = query.username;
    let password = query.password;
    // 可以配合http使用,根据req传递的参数进行操作

    // 查询操作,若data.lenth>0,则查询到相关结果
    let data = await db.query(`SELECT ID FROM user_table WHERE username='${username}'`);
    
    // 删除操作
    await db.query(`DELETE FROM user_tabel WHERE username='${username}'`);    

    // 修改操作
    await db.query(`UPDATE user_tabel SET password='123' WHERE username='${username}'`);

    // 增加操作
    await db.query(`INSERT INTO user_tabel SET (username,password) VALUES (`${username}`,`${password}`));
}).listen(8080);复制代码

Node与MongoDB

#### MongoDB 

 - 一个数据库对应多个集合 

 - 一个集合对应多个文档对象 

 - 在mongo中不论是db还是集合,你都无需去创建他 

 - 直接就当他已经存在,直接Use来使用 

 - use db名称; 

 - 接着会被切换到该db中 

 - `db.要创建的集合名称.save({})`;这样集合就被创建了 

- 1:启动服务器 - `mongod --dbpath "D:/mongodb/db"` // 目录一定要存在自己创建随便名称‘

 - 尽量设置在非系统盘 `C盘生成目录是需要权限的` 

 - 如果看到`waiting for connections on port 27017`说明服务已经启动 

- 客户端连接服务器**另开一个命令行** 

- `mongo` 默认连接的是test数据库 

- 查询有哪些数据库 

- 查询数据库:`show dbs;` 

- 切换数据库: `use 数据库名;` 

- 查询当前db下有哪些集合 

- `show collections;` 

- 查询数据: 

 - `db.集合名.find();` //查询出来的是文档对象 document 

- `db.users.find();` 

- 添加数据: 

 - `db.集合名.save(对象)` //mongo默认会给我们加入_id作为该文档对象的唯一标识 

 - `db.users.save({contry:'中国',name:'小明',score:77});` 

- 删除数据: 

 - `db.集合名.remove(条件对象);`//条件匹配就会被删除 

 - `db.users.remove({name:'小明'});` - 如果给定一个空对像,会匹配全部 

- 更新数据: - `db.集合名.update({匹配条件对象},{$set:{修改后的对象}});` - `db.users.update({name:'小明'},{$set:{contry:'印度'}});;` 

 #### 条件查询 

 ``` 练习: 

 查询姓名为小明的学生 

 db.users.find({name:'小明'});; 

 查询英语成绩大于90分的同学 

 db.users.find({score:{$gt:90}}); //查找成绩大于90分$gt //$lt小于 

查询数学成绩不等于88的同学 db.users.find({score:{$ne:88}}); 

 查询总分大于200分的所有同学 db.users.find({score:{$gt:200}}); 

``` 

 #### 分页 

 - `db.users.find().skip(3).limit(3);` 

- db.集合名称.find().跳到3.显示3条 + limit 0,3 

 #### 排序  

- `db.users.find().sort({key:排序方式});` 

- `db.users.find().sort({'score':1});` //正数代表升序,负数代表降序 

 #### 模糊匹配 

 - `db.users.find({name:{$regex:'小'}});` // 实际上是正则  `db.users.find({name:/小/});`

- `db.users.find({name:{$regex:'明'}});` 

 #### 聚合函数 

 - 需要求当前集合的记录数: 

- `db.users.find().count();` 

- 求最大值 

-求整个集合的总成绩 + db.集合名.聚合({ 组的划分规则{_id:'1',显示内容:{$sum:'$score'}} }) 

- 求所有人的平均分 

 - `db.users.aggregate({$group:{_id:'1',sumscore:{$avg:'$score' } }});` 

- 求按国家分组,求所有国家的总分 

- `db.users.aggregate({$group:{_id:'$contry',sumScore:{$sum:'$score'}}});` 

- 添加基础数据: 

 db.users.save({contry:'中国',name:'小明',score:77}); 

 db.users.save({contry:'中国',name:'小红',score:88}); 

 db.users.save({contry:'中国',name:'小张',score:99}); 

 db.users.save({contry:'美国',name:'jack',score:45}); 

 db.users.save({contry:'美国',name:'rose',score:67}); 

 db.users.save({contry:'美国',name:'mick',score:89});

#### 联合查询 

 ```js 

db.orders.insert([ 

     { "_id" : 1, "item" : "almonds", "price" : 12, "quantity" : 2 }, 

     { "_id" : 2, "item" : "pecans", "price" : 20, "quantity" : 1 }, 

     { "_id" : 3 } 

]); 

db.inventory.insert([ 

     { "_id" : 1, "sku" : "almonds", description: "product 1", "instock" : 120 }, 

     { "_id" : 2, "sku" : "bread", description: "product 2", "instock" : 80 }, 

     { "_id" : 3, "sku" : "cashews", description: "product 3", "instock" : 60 }, 

     { "_id" : 4, "sku" : "pecans", description: "product 4", "instock" : 70 }, 

     { "_id" : 5, "sku": null, description: "Incomplete" }, 

     { "_id" : 6 } 

]);

 db.orders.aggregate([ 

 { 

     $lookup: {  // 聚合的管道加入一次查找操作

         from: "inventory",  // 从哪个集合产生关联

         localField: "item",  // orders(自身产生)关联字段

         foreignField: "sku",  // inventory(其他集合) 需要关联的字段

        orders.item === inventory.item

         as: "inventory_docs"  // inventory数据别名

     } 

 } 

]); 

三集合集合查询

 db.orders.aggregate([

{

    $lookup: { // 聚合的管道加入一次查找操作

    from: "inventory", // 从哪个集合产生关联

    localField: "item", // orders(自身产生)关联字段

    foreignField: "sku", // inventory(其他集合) 需要关联的字段

    orders.item === inventory.item

    as: "inventory_docs" // inventory数据别名

   }

},

{

    $lookup: { 

    from: "xxxx",

    localField: "item", 

    foreignField: "item2", 

    orders.item === inventory.item2

    as: "xxxx"   

}

]); 

```

Node操作MongoDB CRUD

npm i mongodb复制代码

// 引入Mongodb客户端
const MongoClient = require('mongodb').MongoClient;
// 连接MongoDB数据库地址
const url = 'mongodb://localhost:27017';
// 数据库名臣
let dbName = 'student';

var obj = {};

// 客户端连接服务器
MongoClient.connect(url,function(err,client){
    if(err) throw err; //连接异常
    // 获取db对象,再获取集合对象
    const col = client.db(dbName).collection('class');
    // 插入数据 
    col.insert([
        {a:1,b:2},
        {a:2,b:2,c:3},
    }],function(err,result){
        if(err) throw err; //插入异常
        col.find().toArray(function(err,docs){
            if(err) throw err; //查询异常
            console.log(docs);
            client.close(); //关闭连接 (放回mongodb连接池)
        }
    }
});
    复制代码

每次进行CRUD操作,都需要重新连接,在这里封装连接

function _connection(callback){
    MongoClient.connect(url,function(err,client){
        if(err) throw err; // 连接异常
        callback(client); // 获取db对象,再次获取集合对象(操作对象)
    }    
}复制代码

插入数据

obj.insert = function (cname,arrData,fn){
    _connection(function client){
        const col = client.db(dbName).collection(cname);
        col.insert(arrData,function(err,result){
            // 将数据和错误,交给外部处理
            fn(err,result);
            client.close();
        });
    });
}复制代码

obj.inert('student',[{name: 'jack',age: 11}],function(err,result){
    if(err) throw err;
    // result相关操作
});复制代码

更新数据

obj.update = function(cname,filter,update,fn){
    _connection(function(client) {
        const col = client.db(dbName).collection(cname);
        col.update(filter,{$set:update},function(err,result){
            fn(err,result);
            client.close();
        });
    });
}复制代码

obj.update('student',{name:'jack'},{age: 12},function(err,result){
    if(err) throw err;
    // result相关操作
});复制代码

删除数据

obj.delete = function(cname,filter,fn){
    _connection(function(client){
        const col = client.db(dbName).collection(cname);
        col.deleteMany(filter,function(err,result){
            fn(err,result);
            client.close();
        });
    });
}复制代码

obj.delete('student',{name: 'jack'},function(err,result){
    if(err) throw err; // 操作异常
    //进行结果操作
})复制代码

https

const https = require('https');
const fs = require('fs');

// 读取签名与证书
const options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

//创建https服务
https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello world\n');
}).listen(8000);复制代码


转载于:https://juejin.im/post/5cc166d06fb9a0322f7c8f9f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值