//1.如何使用nodejs去訪問我們的mongodb資料庫。// 1.新啟動一個webservice伺服器 var http = require('http'); //3.引入url模組 對前端的請求進行識別 var url = require('url'); //可以將指定的字串轉換為json對象 var qs = require('querystring');// qs.parse() var getUser = require('./db.js')[0];// 2.建立服務 http.createServer(function(request,response){ response.writeHead('200',{'Content-Type':'application/json;charset=utf-8', 'Access-Control-Allow-Origin':'*'}); //擷取訪問對象 var _url = request.url; console.log(_url); var _path = url.parse(_url).pathname;//擷取請求地址 console.log(_path); //4.定義一個標準/users 訪問mongodb switch(_path){ case "/user": //當瀏覽器輸入user頁面時,調用db.js裡的getUser方法,擷取裡面的資料 //查詢ID為009的使用者資訊 1.設計一個新的介面 請求路徑 /userbyid //2.在switch中判斷攔截 //3.在db.js裡面實現一個新的查詢方法得到資料 var _search = url.parse(_url).search; var options = {};// 給json動態賦值// options[數組[0]] = 數組[1]值// ?/user?age=30&username=b// find({age=30&username=b})才能拿到 if(_search==null){ console.log("查詢全部"); options={}; }else{ console.log("查詢單個");// /userId=1008 //options-->{"userId":"1008"} var _ns = _search.substring(1,_search.length); _ns = qs.parse(_ns); console.log(_ns); options = _ns; } console.log("訪問mongodb資料庫"); getUser(options,function(callback){ response.write(JSON.stringify(callback)); response.end(); }); break; case "/userbyid": var jsons = '{"userid":"009","username":"admins"}'; response.write(jsons); response.end(); //問題: //1.不同命名是不是問題。 //2.這樣去設計讓每個介面功能單一的、介面複用性很低 //設計 將查詢全部資料 和 查詢單個資料的介面都放在/user 介面裡面 //核心問題:/user識別 我到底想查詢單個還是查詢全部資料// 查詢全部的介面 /user// 查詢單個介面 /user?userid=1009// 1.也就是無論使用者發/user||/user?userid=1009 請求都可以被switch裡面的選擇分支攔截到// 2.判斷get請求裡面的search是否存在,如果存在查詢單個,如果不存在查詢全部 break; case "/login": //1.擷取post裡面的資料 var _data = ''; //2.request.addListener();進行擷取post提交的資料 //表示的是監聽data事件,只要有了資料,回呼函數裡就會出現值。 request.addListener('data',function(data){ _data+=data;//目前每次拿到的data都是單個字元 //得到完整的字串 }); //資料接收完畢 request.addListener('end',function(data){ console.log(_data); var ops = qs.parse(_data); console.log(ops); var message = {}; getUser(ops,function(res){ if(res.length==0){ message.status = "false"; message.desc = "使用者名稱密碼錯誤"; message.time = "2016/09/09"; }else{ message.auth = "合法使用者"; message.status = "true"; message.desc = "登陸成功"; message.role = "admin"; } response.write(JSON.stringify(message)); response.end(); })// find({username:"",password:""}); }); console.log("this is login api"); break; case "/goods": console.log("只給定假json"); break; case "/favicon.ico": break; //Firefox瀏覽器裡面外掛程式 rest poster,rest api工具 } //5.需要通過npm 去下載一個nodejs訪問mongodb的外掛程式 //npm install mongodb --save-dev 局部// 6.建立db.js在db.js裡面去訪問我們的mongdb //response.end(); }).listen(3080); db.js裡面去訪問我們的mongdb getUser 是case "/user":的時候,輸出的資料。 getGoods 是 case "/goods":的時候輸出的資料。只要寫入不同的介面或者資料給他們返回就可以了。//1.回調的意義就是在訪問資料庫成功的時候,將資料回傳出來/**db層的實現**/var getUser = function(options,callback){ //實現的具體步驟 //1.引入支援node訪問mongodb外掛程式 var mongodb = require('mongodb'); //2.擷取與資料庫伺服器的串連 new mongodb.Server(ip,port,options) var server = new mongodb.Server('127.0.0.1',27017,{auto_connection:true}); //3.通過串連擷取資料庫執行個體 new mongodb.Db('資料庫名稱',擷取與資料庫連接對象,安全性原則) var appdb = new mongodb.Db('app_db',server,{safe:true}); //4.開啟mongodb資料庫// open(function(err,執行個體){//// }); appdb.open(function(err,appdb){ if(!err){ //5.進行下一步的操作,開啟儲存資料的集合 //appdb.collection('資料庫的名稱||集合的名稱',安全性原則,function(){}) appdb.collection('app_db',{safe:true},function(err,collection){ if(!err){ //6.在collection裡面去擷取資料 collection.find(options).toArray(function(err,doc){ //find中可以根據條件查詢 //7.資料將放進callback裡面 if(!err){ callback(doc); } }); } }); } });}var getGoods = function(callback){}module.exports = [getUser,getGoods];html輸入框<div> 使用者名稱:<input id="username"><br/> 密碼:<input id="password"><br/> <button id="btn">登入</button> </div> <script type="text/javascript"> //1.什麼時候開始訪問登入介面。 var _service = "http://127.0.0.1:3080/login"; $("#btn").click(function(){ var _u = $("#username").val(); var _p = $("#password").val(); var _json = {username:_u,password:_p}; //2.觸發登入的時候隨著哪些變化。 $.post(_service,_json,function(data){ console.log("服務端給我們的狀態值"); console.log(data); }); });