正如維基百科 所說:「Node.js 是谷歌 V8 引擎、libuv平臺抽象層 以及主體使用 Javscript 編寫的核心庫三者集合的一個包裝外殼。」 除此以外,值得注意的是,Node.js 的做者瑞恩·達爾 (Ryan Dahl) 的目標是建立具備實時推送能力的網站。在 Node.js 中,他給了開發者一個使用事件驅動來實現異步開發的優秀解決方案。html
今天就來分享一個基礎的nodejs運用----------模擬註冊登錄。如今都是用的第三方,幾乎沒人用原生的來本身寫。不過若是你是初學者,仍是能夠看看的。但願大神門勿噴小女子哈!!!node
首先,您須要創建一個文件,在文件下建一個html文件夾,json文件,如圖,如下代碼中用到的文件都在圖中。數據庫
此外,json數據格式以下:json
直接在命令臺,進入你的index.js使用命令node index.js 來在瀏覽器展現。提示使用你本身的域名+端口號數組
好了,直接上的代碼吧
瀏覽器
//建立服務器var http=require('http');var fs=require('fs');var url=require('url');var querystring=require('querystring');var server=http.createServer(handle).listen(3000);function handle(req,res){ var filePath=''; //顯示的頁面 if (req.url=="/"){ filePath='./html/index.html'; fs.exists(filePath,function(exists){ if (exists){ fs.readFile(filePath,function(err,data){ if (err){return} res.end(data); }) }else{ send404(res) } }) } //經過req.method判斷用戶是否註冊和登錄 // get 判斷用戶是否註冊過 post 沒有註冊的註冊,並保存響應數據到數據json表中 else if(req.url.indexOf('/from')!=-1){ if (req.method=='GET'){ // console.log(req.url) ///from?username=14545&password=4546536636 // .解析url,返回一個json格式的數組 url.parse(‘http://www.baidu.com?page=1’,true); var parme=url.parse(req.url,true); // console.log(parme) // { // protocol: null, // slashes: null, // auth: null, // host: null, // port: null, // hostname: null, // hash: null, // search: '?username=14545&password=4546536636', // query: { username: '14545', password: '4546536636' }, // pathname: '/from', // path: '/from?username=14545&password=4546536636', // href: '/from?username=14545&password=4546536636' } var info=parme.query; // 拿到用戶輸入的信息,與數據庫對比 var username=info.username; var password=info.password; fs.readFile('./tsconfig.json','utf-8',function(err,data){ if (err){ return; } // console.log(data) // { // "success":'1', // "data": [ // {"username":"wj", // "pasword":"123456" // } // ] // } // 數據轉化 var data=JSON.parse(data); // console.log(data) // { success: '1', // data: [ { username: 'wj', pasword: '123456' } ] } var message=data.data; for(var i=0;i<message.length;i++){ if (message[i].username==username&&message[i].password==password){ // 有此帳戶,可直接登陸 filePath='./html/login.html'; break; }else{ // 沒有此帳戶,須要註冊 filePath='./html/reg.html' } } fs.exists(filePath,function(exists){ if (exists){ fs.readFile(filePath,function(err,data){ if (err){return} res.end(data); }) }else{ send404(res) } }) }) } // POST傳輸數據 else if(req.method=='POST'){ var postData=''; filePath='./html/index.html'; req.on('data',function(chunk){ postData+=chunk; // console.log(postData) }) req.on('end',function(){ var data=querystring.parse(postData); var obj={}; obj.username=data.username; obj.password=data.password; fs.readFile('./tsconfig.json','utf-8',function(err,data){ if (err){ return; } var data=JSON.parse(data); data.data.push(obj) fs.writeFile('./tsconfig.json',JSON.stringify(data),function(){ }) }) }) fs.exists(filePath,function(exists){ if (exists){ fs.readFile(filePath,function(err,data){ if (err){return} res.end(data); }) }else{ send404(res) } }) } } //顯示的頁面 else{ filePath='.'+req.url; // console.log(req.url); // console.log(filePath); fs.exists(filePath,function(exists){ if (exists){ fs.readFile(filePath,function(err,data){ if (err){return} res.end(data); }) }else{ send404(res) } }) }}//整過過程都是異步的,因此判斷文件的函數須要寫在內部function send404(res){ fs.readFile('./html/404.html',function(err,data){ if (err){return} res.end(data) })}