1. 程式人生 > >nodejs操作mongodb資料庫

nodejs操作mongodb資料庫

又從頭捋了一遍這個案例,迷迷糊糊終於開點竅了,雖然寫的很簡單,也很low,但是剛起步,再接再厲。

第一步:安裝node環境,配置全域性變數。

第二步:安裝mongodb,也有一些視覺化工具,喜歡命令列操作的也可以不用,我沒用也就不介紹了。

第三步:新建一個目錄存放資料  隨便放在哪個盤  (md 檔名),也可以右鍵新建,我的是d:data

第四步:開啟mongodb,cmd切盤到mongodb的安裝目錄bin下,C:\Program Files\MongoDB\Server\3.4\bin這是我的目錄,然後mongod -dbpath d:data,位址列輸入http://127.0.0.1:27017/,這個埠是預設的,也可以修改,成功後在頁面上會看到

It looks like you are trying to access MongoDB over HTTP on the native driver port.

第五步:學習一些mongodb的基本命令,會建立查詢就可以了,cmd切盤到mongodb的安裝目錄bin下,命令列輸入mongo,在這裡面可以對資料庫進行操作,也可以執行一些計算

第六步:建立一個數據庫use myData,db,然後db.myData.find(),檢視我們建立的資料庫,什麼都沒有,可以先插入一個數據,db.myData.insert({"username":"susu"}),檢視所有的資料庫:show dbs


到這裡對於資料庫瞭解這些就可以了,重點是我們如何用nodejs去操作資料庫,然後響應前端的一些操作,也就是提供介面。之前有寫過如何通過node開啟一個本地伺服器,現在用到了,這裡用到了querystring,上程式碼:

server.js:

//1.新啟一個伺服器
var http=require('http');
var url=require('url');
//querystring將指定的字串轉換為json物件
//qs.parse();
var qs=require('querystring');
//建立服務
var getUser=require('./db.js')[0];
var addUser=require('./db.js')[1];
var deleted=require('./db.js')[2];
var change=require('./db.js')[3];
http.createServer(function(request,response){
response.writeHead('200',{'Content-Type':'application/json;charset=utf-8','Access-Control-Allow-Origin':'*'});
//引入url模組
var _url = request.url;
var _path = url.parse(_url).pathname;
switch(_path){
case "/register":
var _data="";
//獲取post提交的資料
//監聽data,有資料,回撥函式就會出現值
request.addListener('data',function(data){
_data+=data;//目前每次拿到的data都是單個字元
//得到完整字串
});
//資料接收完畢
request.addListener('end',function(){
var ops=qs.parse(_data);
var userops = {"userName":ops.userName};
var message={}; //定義返給前端的資訊
getUser(userops,function(res){
//userops是前端傳過來的引數(根據這個引數來資料庫中查詢)
if(res.length!==0){ //查詢到了這個使用者名稱(不能再註冊)
message.code="00000";
message.status = "使用者名稱已存在";
}else{
//查詢不到,可以註冊
message.status = "註冊成功";
message.code="10000";
//增加進資料庫(這個地方邏輯有點錯誤,還沒想到比較好的解決辦法,一般不會影響)
addUser(ops,function(ress){
if(ress.length!==0){
console.log("成功")
}else{
console.log("失敗")
}
})
}
response.write(JSON.stringify(message));
response.end();
})
});
break;
case "/login":
var _data="";
//獲取post提交的資料
//監聽data,有資料,回撥函式就會出現值
request.addListener('data',function(data){
_data+=data;//目前每次拿到的data都是單個字元
//得到完整字串
});
//資料接收完畢
request.addListener('end',function(){
var ops=qs.parse(_data);
var message={}; //定義返給前端的資訊
getUser(ops,function(res){
//ops是前端傳過來的引數(如果不傳,返回出資料庫中所有資料)
if(res.length!==0){
//通過getUser這個自定義函式去自動查詢資料庫中的資料
//只要用使用者名稱和密碼都正確res的長度才不為零,他是一個數組
message.code="10000";
message.status = "登陸成功";
}else{
message.code="00000";
message.status = "登陸失敗";
}
response.write(JSON.stringify(message));
response.end();
})
});
break;
case "/deleted":
var _data="";
//獲取post提交的資料
//監聽data,有資料,回撥函式就會出現值
request.addListener('data',function(data){
_data+=data;//目前每次拿到的data都是單個字元
//得到完整字串
});
//資料接收完畢
request.addListener('end',function(){
var ops=qs.parse(_data);
var message={}; //定義返給前端的資訊
deleted(ops,function(res){
console.log(res)
response.write(JSON.stringify(message));
response.end();
})
});
break;
case "/change":
var _data="";
//獲取post提交的資料
//監聽data,有資料,回撥函式就會出現值
request.addListener('data',function(data){
_data+=data;//目前每次拿到的data都是單個字元
//得到完整字串
});
//資料接收完畢
request.addListener('end',function(){
var ops=qs.parse(_data);
var userOld = {"userName":ops.userName};
var usernew = {$set:{"userName":ops.passWord}};
var userops = {"userName":ops.passWord};
console.log(userops)
var message={}; //定義返給前端的資訊
getUser(userops,function(res){
//userops是前端傳過來的引數(根據這個引數來資料庫中查詢)
if(res.length!==0){ //查詢到了這個使用者名稱(不能再註冊)
message.code="00000";
message.status = "使用者名稱已存在";
}else{
//查詢不到,可以註冊
message.status = "修改成功";
message.code="10000";
//增加進資料庫(這個地方邏輯有點錯誤,還沒想到比較好的解決辦法,一般不會影響)
change(userOld,usernew,function(ress){
if(ress.length!==0){
console.log("成功")
}else{
console.log("失敗")
}
})
}
response.write(JSON.stringify(message));
response.end();
})
});
break;
}
}).listen(3080); //監聽的埠

然後method.js:
//查詢使用者是否存在(登入)
var getUser=function(options,callback){
//引入支援node訪問mongodb外掛
var mongodb=require('mongodb');
//獲取與資料庫伺服器的連線
var server=new mongodb.Server('127.0.0.1',27017,{auto_connection:true});
//通過連接獲取資料庫例項
//mongodb.Db('資料庫名稱',獲取與資料庫連線物件,安全策略)
var appdb=new mongodb.Db('myData',server,{safe:true});
//open 是否發生錯誤,例項
appdb.open(function(err,appdb){
if(!err){
//進行下一步操作 開啟儲存資料的集合
//collection 資料庫名稱 安全策略 回撥函式
appdb.collection('dbdata',{safe:true},function(err,collection){
if(!err){
//查詢
collection.find(options).toArray(function(err,doc){
console.log(doc+"db1")
if(!err){
console.log(doc+"db2")
callback(doc);
}
});
}
})
}
})
}
//增加使用者(註冊)
var addUser = function(options,callback){
//引入支援node訪問mongodb外掛
var mongodb=require('mongodb');
//獲取與資料庫伺服器的連線
var server=new mongodb.Server('127.0.0.1',27017,{auto_connection:true});
//通過連接獲取資料庫例項
//mongodb.Db('資料庫名稱',獲取與資料庫連線物件,安全策略)
var appdb=new mongodb.Db('myData',server,{safe:true});
//open 是否發生錯誤,例項
appdb.open(function(err,appdb){
if(!err){
//進行下一步操作 開啟儲存資料的集合
//collection 資料庫名稱 安全策略 回撥函式
appdb.collection('dbdata',{safe:true},function(err,collection){
if(!err){
//增加
collection.insert(options,function(error, result){
       if(error)
       {
           console.log('Error:'+ error);
       }else{
           callback(result)
       }
   });
}
//在collection裡面獲取資料,然後放到callback
})
}
})
}
//刪除使用者(登出)
var removeUser=function(options,callback){
//引入支援node訪問mongodb外掛
var mongodb=require('mongodb');
//獲取與資料庫伺服器的連線
var server=new mongodb.Server('127.0.0.1',27017,{auto_connection:true});
//通過連接獲取資料庫例項
//mongodb.Db('資料庫名稱',獲取與資料庫連線物件,安全策略)
var appdb=new mongodb.Db('myData',server,{safe:true});
//open 是否發生錯誤,例項
appdb.open(function(err,appdb){
if(!err){
//進行下一步操作 開啟儲存資料的集合
//collection 資料庫名稱 安全策略 回撥函式
appdb.collection('dbdata',{safe:true},function(err,collection){
if(!err){
//刪除
collection.remove(options,function(error, result){
       if(error)
       {
           console.log('Error:'+ error);
       }else{
           callback(result)
       }
   });
}
//在collection裡面獲取資料,然後放到callback
})
}
})
}
//修改使用者(換密碼)
var updateUser=function(options,updata,callback){
//引入支援node訪問mongodb外掛
var mongodb=require('mongodb');
//獲取與資料庫伺服器的連線
var server=new mongodb.Server('127.0.0.1',27017,{auto_connection:true});
//通過連接獲取資料庫例項
//mongodb.Db('資料庫名稱',獲取與資料庫連線物件,安全策略)
var appdb=new mongodb.Db('myData',server,{safe:true});
//open 是否發生錯誤,例項
appdb.open(function(err,appdb){
if(!err){
//進行下一步操作 開啟儲存資料的集合
//collection 資料庫名稱 安全策略 回撥函式
appdb.collection('dbdata',{safe:true},function(err,collection){
if(!err){
//修改
collection.update(options,updata,function(error, result){
       if(error)
       {
           console.log('Error:'+ error);
       }else{


           console.log(result.result.n);
       }
   });
}
//在collection裡面獲取資料,然後放到callback
})
}
})
}


module.exports=[getUser,addUser,removeUser,updateUser];  //暴露出去,在server.js中呼叫

這個檔案裡面主要是一些對資料庫進行操作的方法,實現了基本的增刪改查,server.js裡面主要是寫的一些介面。cmd切盤到本專案目錄下,然後node server.js開啟伺服器就可以了。

html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>mongodb</title>
<script type="text/javascript" src="jquery-2.1.0.js" ></script>
</head>
<style>
*{margin:0;padding: 0;}
body{background: #222;}
</style>
<body>
<!--登入-->
<div style="width:400px;padding:15px 0;text-align:center;color:#DDDDDD;height:280px;border: 3px solid #fff;border-radius:8px;margin: 0 auto;margin-top: 220px;">
名稱:<input style="height:28px;margin:15px 0;" type = "text" class="userName" value = ""/></br>
密碼:<input style="height:28px;margin:15px 0;" type = "password" class = "passWord" value = ""/></br>
<input type = "submit" style="height:28px;margin:15px 0;width:100px;background: bisque;" class="submit" value = "註冊"/>
</div>
</body>
</html>
<script>
$(".submit").on("click",function(){
var userName = $(".userName").val();
var passWord = $(".passWord").val();
var data = {};
data.userName = userName;
data.passWord = passWord;
(var url = "http://127.0.0.1:3080/register"
var url = "http://127.0.0.1:3080/login"
var url = "http://127.0.0.1:3080/deleted"
var url = "http://127.0.0.1:3080/change")
//上面這是四個介面,每次呼叫一個就可以了
$.post(url,data,function(data){
console.log(data)
})
});
</script>


到這裡差不多算是做一個全棧了,很簡單,但是這算是一個起步,再深入學習一下,這裡面註冊個修改邏輯有待改善,後期會找出一個更完美的方法,再接再勵!