第七章 建議學(xué)習(xí)時(shí)間4小時(shí)  課程共10章

學(xué)習(xí)方式:詳細(xì)閱讀,并手動(dòng)實(shí)現(xiàn)相關(guān)代碼

學(xué)習(xí)目標(biāo):此教程將教會(huì)大家 安裝Node、搭建服務(wù)器、express、mysql、mongodb、編寫后臺(tái)業(yè)務(wù)邏輯、編寫接口,最后完成一個(gè)完整的項(xiàng)目后臺(tái),預(yù)計(jì)共10天課程。

 

node.js操作mangodb


 

創(chuàng)建一個(gè)用于放置今天文件的文件夾,npm init初始化一下,并創(chuàng)建demo1.js用于寫node代碼

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

使用 npm install mongodb,將mongodb控制模塊安裝到本地

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

在demo1.js中寫入下面操作代碼

 

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 1 var mongo = require("mongodb"); //引入mongodb模塊 2 var assert = require("assert"); //引入斷言模塊 3  4 var MongoClient = mongo.MongoClient;  //開啟服務(wù) 5  6 var Urls = "mongodb://localhost:27017/demo2";  //url儲(chǔ)存  放在連接池中。 7  8 MongoClient.connect(Urls,function(err,db){  //獲取連接 9     assert.equal(null,err);  //使用斷言模塊代替以前的 if判斷10     11 12     //插入數(shù)據(jù)13     db.collection("t1").insert({"name":"xiaoming"},function(err,result){ //連接到數(shù)據(jù)庫上面,并使用參數(shù)傳入集合14         assert.equal(null,err);15         console.log(result);16         db.close();17     });18 19 20 });

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

代碼解釋:

1行2行引入了需要的兩個(gè)模塊,4行開啟服務(wù)器,

6行是url的地址,一般默認(rèn)安裝的時(shí)候地址和端口是 “mongodb://localhost:27017”,后面的demo2是我的mongodb的數(shù)據(jù)庫的名字(你替換成你自己創(chuàng)建的數(shù)據(jù)庫即可)

8行是根據(jù)上面聲明的url去和數(shù)據(jù)庫建立連接,connect方法有兩個(gè)參數(shù),1、連接的數(shù)據(jù)庫地址,2、回調(diào)函數(shù),回調(diào)函數(shù)兩個(gè)參數(shù)表示發(fā)送錯(cuò)誤,以及正確的情況下返回?cái)?shù)據(jù)庫的鏈接,我們就可以在此鏈接上進(jìn)行操作了。

注意:這里的鏈接是初學(xué)者常報(bào)錯(cuò)的地方,如果報(bào)錯(cuò),去確認(rèn)地址和數(shù)據(jù)庫名字是否填錯(cuò),確保自己的數(shù)據(jù)庫中有對應(yīng)的庫名字。

重點(diǎn)講解下 13行,這里是node插入數(shù)據(jù)庫的操作, db.collection("t1")表示獲取需要操作的表,  insert是插入方法,方法接收兩個(gè)參數(shù),1、插入的內(nèi)容,2、回調(diào)函數(shù),回調(diào)函數(shù)兩個(gè)參數(shù)表示發(fā)送錯(cuò)誤,以及正確的情況下返回的結(jié)果。

15行打印出錯(cuò)結(jié)果,16行關(guān)閉和數(shù)據(jù)庫的鏈接(如果一直連著,瀏覽器會(huì)崩潰)

執(zhí)行demo1.js。成功即可得到下圖結(jié)果   (  劃線處的 n表示成功了1條 )

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

查詢數(shù)據(jù)庫,可以看到新添加的數(shù)據(jù)

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

查找:  find方法,傳入查找篩選的json(如果不傳,就查詢?nèi)?,后面的toArray是將數(shù)據(jù)作處理之后變成我們可以識(shí)別的數(shù)組格式

后面的操作,除了中部的數(shù)據(jù)操作部分代碼不同,其余代碼都是相同的。

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 1 var mongo = require("mongodb"); //引入mongodb模塊 2 var assert = require("assert"); //引入斷言模塊 3  4 var MongoClient = mongo.MongoClient;  //開啟服務(wù) 5  6 var Urls = "mongodb://localhost:27017/demo2";  //url儲(chǔ)存  放在連接池中。 7  8 MongoClient.connect(Urls,function(err,db){  //獲取連接 9     assert.equal(null,err);  //使用斷言模塊代替以前的 if判斷10     11 12     //查找數(shù)據(jù)13     db.collection("t1").find({"name":"xiaoming"}).toArray(function(err,result){14         assert.equal(null,err);15         console.log(result);16         db.close();17     })18 19 20 });

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

運(yùn)行,成功查找到上一步插入的數(shù)據(jù)

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

 刪除    使用 deleteOne刪除一條數(shù)據(jù),兩個(gè)參數(shù) 1、刪除的查找json 2、回調(diào)函數(shù)

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 1 var mongo = require("mongodb"); //引入mongodb模塊 2 var assert = require("assert"); //引入斷言模塊 3  4 var MongoClient = mongo.MongoClient;  //開啟服務(wù) 5  6 var Urls = "mongodb://localhost:27017/demo2";  //url儲(chǔ)存  放在連接池中。 7  8 MongoClient.connect(Urls,function(err,db){  //獲取連接 9     assert.equal(null,err);  //使用斷言模塊代替以前的 if判斷10     11     //刪除數(shù)據(jù)12     db.collection("t1").deleteOne({"name":"xiaoming"},function(err,result){ //連接到數(shù)據(jù)庫上面,并使用參數(shù)傳入集合13         assert.equal(null,err);14         console.log(result);15         db.close();16     });17 18 });

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

執(zhí)行,成功的結(jié)果

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 查詢數(shù)據(jù)庫發(fā)現(xiàn) xiaoming那條數(shù)據(jù)被刪除了

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

修改: 使用 update方法,包括三個(gè)參數(shù),1、查詢條件,2、修改的字段以及修改器,3、回調(diào)函數(shù)

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

var mongo = require("mongodb"); //引入mongodb模塊var assert = require("assert"); //引入斷言模塊var MongoClient = mongo.MongoClient;  //開啟服務(wù)var Urls = "mongodb://localhost:27017/demo2";  //url儲(chǔ)存  放在連接池中。MongoClient.connect(Urls,function(err,db){  //獲取連接
    assert.equal(null,err);  //使用斷言模塊代替以前的 if判斷
    
    //修改數(shù)據(jù)
    db.collection("t1").update({"name":"zhangsan1"},{$set:{"name":"xiaoming"}},function(err,result){ //連接到數(shù)據(jù)庫上面,并使用參數(shù)傳入集合
        assert.equal(null,err);
        console.log(result);
        db.close();
    });

});

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

運(yùn)行成功的結(jié)果

 電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

查詢數(shù)據(jù)庫發(fā)現(xiàn),原來的zhangsan1被修改成了xiaoming

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

 到這里,就實(shí)現(xiàn)了通過nodejs增刪改查mongodb數(shù)據(jù)庫

 

封裝增刪改查的代碼


 

創(chuàng)建一個(gè)封裝js的文件  dbhandler.js  ,將下列代碼復(fù)制進(jìn)去(封裝的代碼文字解說太困難,這里就不解釋了,只給大家介紹如何使用,以后可能會(huì)出視頻教程,到時(shí)候再詳細(xì)解釋這個(gè)封裝)

 --   注:第6行的url后面的數(shù)據(jù)庫 替換成自己要操作的數(shù)據(jù)庫,其他都不用變

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

var mongo=require("mongodb");//@2.2.11var MongoClient = mongo.MongoClient;var assert = require('assert');var host="localhost";var port="27017";var Urls = 'mongodb://localhost:27017/demo2';//add一條數(shù)據(jù)var add = function(db,collections,selector,fn){  var collection = db.collection(collections);
  collection.insertMany([selector],function(err,result){
    assert.equal(err,null);
    fn(result);
    db.close();
  });
}//deletevar deletes = function(db,collections,selector,fn){  var collection = db.collection(collections);
  collection.deleteOne(selector,function(err,result){    try{assert.equal(err,null)}catch(e){
      console.log(e);
    }
    fn(result);
    db.close();
  });

};//findvar find = function(db,collections,selector,fn){  var collection = db.collection(collections);

    collection.find(selector).toArray(function(err,docs){      try{
        assert.equal(err,null);
      }catch(e){
        console.log(e);
        docs = [];
      }

      fn(docs);
      db.close();
    });

}//(權(quán)限控制) -- 暫時(shí)沒有用MongoClient.connect(Urls, function(err, db) {
  find(db,"powers",null,function(d){
    console.log("123s");
    console.log(d.length);
  });
});//updatevar updates = function(db,collections,selector,fn){  var collection = db.collection(collections);
  console.log(selector);
  collection.updateOne(selector[0],selector[1],function(err,result){
    assert.equal(err,null);
    assert.equal(1,result.result.n);
    fn(result);
    db.close();
  });

}//方法都賦值到操作對象上,便于調(diào)用var methodType = {
  login:find,
  show:find,
  add:add,
  getpower:find,
  update:updates,  delete:deletes,
  updatepass:updates,
  adduser:add,
  usershow:find,
  getcategory:find,
  getcourse:find,
  find:find,
  state:find,
  top:find,
  AddDirectory:find,
  updateDirectory:updates,
  deleteDirectory:deletes,
  showlist:find,
  showdir:find
};//主邏輯module.exports = function(req,res,collections,selector,fn){
  MongoClient.connect(Urls, function(err, db) {
    assert.equal(null, err);
    console.log("Connected correctly to server");
    methodType[req.query.action](db,collections,selector,fn);
    db.close();
  });

};

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 

 使用這個(gè)封裝

具體的封裝的使用方法,我們將在下一節(jié)課項(xiàng)目中去介紹

 

今天就講到這里,明天我們講解:項(xiàng)目的創(chuàng)建,后臺(tái)數(shù)據(jù)請求接口的編寫

 

http://www.cnblogs.com/chengduxiaoc/p/7049498.html