標籤:瀏覽器 學習 users sql require install local npm 錯誤
學習方式:詳細閱讀,並手動實現相關代碼
學習目標:此教程將教會大家 安裝Node、搭建伺服器、express、mysql、mongodb、編寫後台商務邏輯、編寫介面,最後完成一個完整的項目後台,預計共10天課程。
node.js操作mangodb
建立一個用於放置今天檔案的檔案夾,npm init初始化一下,並建立demo1.js用於寫node代碼
使用 npm install mongodb,將mongodb控制模組安裝到本地
在demo1.js中寫入下面作業碼
1 var mongo = require("mongodb"); //引入mongodb模組 2 var assert = require("assert"); //引入斷言模組 3 4 var MongoClient = mongo.MongoClient; //開啟服務 5 6 var Urls = "mongodb://localhost:27017/demo2"; //url儲存 放在串連池中。 7 8 MongoClient.connect(Urls,function(err,db){ //擷取串連 9 assert.equal(null,err); //使用斷言模組代替以前的 if判斷10 11 12 //插入資料13 db.collection("t1").insert({"name":"xiaoming"},function(err,result){ //串連到資料庫上面,並使用參數傳入集合14 assert.equal(null,err);15 console.log(result);16 db.close();17 });18 19 20 });
代碼解釋:
1行2行引入了需要的兩個模組,4行開啟伺服器,
6行是url的地址,一般預設安裝的時候地址和連接埠是 “mongodb://localhost:27017”,後面的demo2是我的mongodb的資料庫的名字(你替換成你自己建立的資料庫即可)
8行是根據上面聲明的url去和資料庫建立串連,connect方法有兩個參數,1、串連的資料庫地址,2、回呼函數,回呼函數兩個參數表示發送錯誤,以及正確的情況下返回資料庫的連結,我們就可以在此連結上進行操作了。
注意:這裡的連結是初學者常報錯的地方,如果報錯,去確認地址和資料庫名字是否填錯,確保自己的資料庫中有對應的庫名字。
重點講解下 13行,這裡是node插入資料庫的操作, db.collection("t1")表示擷取需要操作的表, insert是插入方法,方法接收兩個參數,1、插入的內容,2、回呼函數,回呼函數兩個參數表示發送錯誤,以及正確的情況下返回的結果。
15行列印出錯結果,16行關閉和資料庫的連結(如果一直連著,瀏覽器會崩潰)
執行demo1.js。成功即可得到結果 ( 劃線處的 n表示成功了1條 )
查詢資料庫,可以看到新添加的資料
尋找: find方法,傳入尋找篩選的json(如果不傳,就查詢全部),後面的toArray是將資料作處理之後變成我們可以識別的數組格式
後面的操作,除了中部的資料操作部分代碼不同,其餘代碼都是相同的。
1 var mongo = require("mongodb"); //引入mongodb模組 2 var assert = require("assert"); //引入斷言模組 3 4 var MongoClient = mongo.MongoClient; //開啟服務 5 6 var Urls = "mongodb://localhost:27017/demo2"; //url儲存 放在串連池中。 7 8 MongoClient.connect(Urls,function(err,db){ //擷取串連 9 assert.equal(null,err); //使用斷言模組代替以前的 if判斷10 11 12 //尋找資料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 });
運行,成功尋找到上一步插入的資料
刪除 使用 deleteOne刪除一條資料,兩個參數 1、刪除的尋找json 2、回呼函數
1 var mongo = require("mongodb"); //引入mongodb模組 2 var assert = require("assert"); //引入斷言模組 3 4 var MongoClient = mongo.MongoClient; //開啟服務 5 6 var Urls = "mongodb://localhost:27017/demo2"; //url儲存 放在串連池中。 7 8 MongoClient.connect(Urls,function(err,db){ //擷取串連 9 assert.equal(null,err); //使用斷言模組代替以前的 if判斷10 11 //刪除資料12 db.collection("t1").deleteOne({"name":"xiaoming"},function(err,result){ //串連到資料庫上面,並使用參數傳入集合13 assert.equal(null,err);14 console.log(result);15 db.close();16 });17 18 });
執行,成功的結果
查詢資料庫發現 xiaoming那條資料被刪除了
修改: 使用 update方法,包括三個參數,1、查詢條件,2、修改的欄位以及修改器,3、回呼函數
var mongo = require("mongodb"); //引入mongodb模組var assert = require("assert"); //引入斷言模組var MongoClient = mongo.MongoClient; //開啟服務var Urls = "mongodb://localhost:27017/demo2"; //url儲存 放在串連池中。MongoClient.connect(Urls,function(err,db){ //擷取串連 assert.equal(null,err); //使用斷言模組代替以前的 if判斷 //修改資料 db.collection("t1").update({"name":"zhangsan1"},{$set:{"name":"xiaoming"}},function(err,result){ //串連到資料庫上面,並使用參數傳入集合 assert.equal(null,err); console.log(result); db.close(); });});
運行成功的結果
查詢資料庫發現,原來的zhangsan1被修改成了xiaoming
到這裡,就實現了通過nodejs增刪改查mongodb資料庫
封裝增刪改查的代碼
建立一個封裝js的檔案 dbhandler.js ,將下列代碼賦值進去(封裝的代碼文字解說太困難,這裡就不解釋了) -- 註:第6行的url後面的資料庫 替換成自己要操作的資料庫,其他都不用變
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一條資料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(); });}//(許可權控制) -- 暫時沒有用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(); });}//方法都賦值到操作對象上,便於調用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(); });};
使用這個封裝
具體的封裝的使用方法,我們將在下一節課項目中去介紹
今天就講到這裡,明天我們講解:項目的建立,後台資料請求介面的編寫
node.js零基礎詳細教程(7):node.js操作mongodb,及操作方法的封裝