淺談nodejs中HTTP模塊應用


  這里給大家分享下后端人員如果利用nodejs對數據的一些處理情況  適用於初學者使用 大牛勿噴

給大家分享下主要后端思想部分代碼,前端部分就不展示了

  1 const http = require("http");
  2 const fs = require("fs");
  3 const url=require("url");
  4 const path = require("path");
  5 const util = require("./util");
  6 const Mock = require("./src/app/mock/node_modules/mockjs");
  7 
  8 //創建一個服務
  9 let arr = [];//用來存放下面建立的json文件的數據
 10 const server = http.createServer((request, response) => {
 11     //首先我們會接受靜態請求和接口請求 通過封裝函數來實現對其不同的操作
 12     //首先我們對請求進行分類
 13     let filePath = request.url == "/" ? "login.html" : url.parse(request.url).pathname;
 14     //console.log(filePath)
 15     if (path.extname(filePath)) {
 16         //存在后綴就是靜態資源文件請求
 17         util.fileRead(path.join("./src", filePath), response)
 18     } else if (filePath == "/api/login") {
 19 
 20         //聲明一個對象給前端返回后端處理的數據請求結果
 21 
 22         let opj = {
 23             code: 1,
 24             msg: "請求成功"
 25         }
 26         //接受前端給我發過來的請求體
 27         util.getData(request, (data) => {
 28             console.log(data, "前端請求數據結果")
 29             //登錄的ajax請求
 30             //我們利用一個json文件模擬本地數據庫
 31             //首先判斷我們這個數據庫存在不存在
 32             if (fs.existsSync("./data.json")) {
 33                 //存在的情況下
 34                 //和數據庫的數據進行比較
 35                 //讀取數據庫文件資源
 36                 let dataAll = JSON.parse(fs.readFileSync("./data.json", "utf8"));
 37                 data = JSON.parse(data)
 38                 //console.log(data, "dengluqingqiu............")
 39                 //檢驗是不是賬號密碼不對
 40                 let flag = dataAll.find(item => {
 41                     return item.user == data.user && item.pwd == data.pwd;
 42                 });
 43                 let flag1 = dataAll.find(item => {
 44                     return item.user == data.user;
 45                 })
 46                 //console.log(flag, "**************")
 47                 //檢測是不是這個名字就不存在了
 48                 if (!flag) {
 49                     //找不到證明驗證失敗
 50                     opj.code = 0;
 51                     opj.msg = "用戶名或者密碼輸入錯誤"
 52                 }
 53                 if (!flag1) {
 54                     opj.code = 0;
 55                     opj.msg = "該用戶沒有被注冊"
 56                 }
 57 
 58             } else {
 59                 //不存在的情況下
 60                 opj.code = 0;
 61                 opj.msg = "該用戶沒有被注冊"
 62             }
 63             //返回后端處理結果
 64             //console.log(JSON.stringify(opj))
 65             //console.log(opj, "--------------------")
 66             response.end(JSON.stringify(opj))
 67         })
 68     } else if (filePath == "/api/register") {
 69         //聲明一個對象給前端返回后端處理的數據請求結果
 70         let opj = {
 71             code: 1,
 72             msg: "注冊成功"
 73         }
 74         //注冊頁面發來的ajax請求
 75         //接受ajax傳過來的數據
 76         util.getData(request, data => {
 77             //console.log(data, "前端請求數據結果")
 78             console.log(data, "這里")
 79             data = JSON.parse(data);
 80             let f = arr.some(item => {
 81                 return item.user == data.user
 82             })
 83             if (!f) {
 84                 arr.push(data);
 85             }
 86             //首先在這個請求中我們還是利用一個json文件代替數據庫
 87             //判斷這個文件是不是存在 不存在創建
 88             if (!fs.existsSync("./data.json")) {
 89                 //不存在的情況下
 90                 //創建
 91                 if (arr.length) {
 92                     fs.writeFileSync("./data.json", JSON.stringify(arr));
 93                 }
 94             } else {
 95                 //存在的情況下
 96                 //獲取這個文件收據進行遍歷
 97                 let read = JSON.parse(fs.readFileSync("./data.json", "utf8"));
 98                 let flag = read.some(item => {
 99                     return item.user == data.user
100                 });
101                 if (flag) {
102                     opj.code = 0;
103                     opj.msg = "該用戶已被注冊過"
104                 }
105                 fs.writeFileSync("./data.json", JSON.stringify(arr));
106             }
107             response.end(JSON.stringify(opj))
108         })
109 
110     } else if (filePath === "/api/main") {
111         util.getData(request,data=>{
112             //console.log(data,"**********");
113             let {page,limit}=data;
114             //利用mock隨機生成圖片
115             let images=Mock.Random.image("200x200","#f00","chen");
116             //利用傳過來的參數隨機生成一個數據給前端返回回去
117             let mockData=Mock.mock({
118                 [`list|${limit}`]:[
119                     {
120                         title:'@ctitle',
121                         'id|+1':(page-1)*limit,
122                         img:images
123                     }
124                 ]
125             });
126             //將這個隨機創造的數據返回給前端
127             response.end(JSON.stringify(mockData))
128         })
129     }
130 });
131 
132 //監聽這個服務
133 server.listen(8000, () => {
134     console.log(server.address().port)
135 })

其中上述代碼用到個幾個封裝如下   上述代碼依然可以優化 怕優化太多不易理解 有能力的同學可以自己優化下

 1 const url = require("url");
 2 const fs = require("fs");
 3 module.exports={
 4     fileRead(rootPath,response){
 5         //此函數是對文件的讀取 與判斷文件是否存在滴
 6         if(fs.existsSync(rootPath)){
 7             //文件存在的情況 讀取返回
 8             fs.readFile(rootPath,(err,data)=>{
 9                 if(err) throw err;
10                 response.end(data.toString())
11             })
12         }else{
13             //文件不存在的情況下 改狀態碼
14             response.ststusCode=404;
15             response.end()
16         }
17     },
18     getData(request,callBack){
19         //第一個參數是請求體 第二個參數是回調函數
20         //封裝一個函數用來判斷是get請求還是post請求
21         if(request.method==="POST"){
22             let data="";
23             request.on("data",chunk=>{
24                 data+=chunk;
25             });
26             request.on("end",()=>{
27                 callBack(data)
28             })
29         }else if(request.method=="GET"){
30             //注意這里第二個參數加個true可以 很有靈性
31             //將page=1&limit=15轉換成對象 方便了后端人員的數據處理
32             let data=url.parse(request.url,true).query;
33             callBack(data)
34         }
35     }
36 }

 

    其實主要思想也就那幾個   

    首先 我們需要創建一個服務 然后在這個服務中判斷一下我們接受的http都是那些 

無非就是兩種 一種是靜態資源的加載  也就是我們的html頁面的加載和css js的一些引入加載 

另一種就是我們的一些ajax接口的請求  通過前端人員給我們發送過來的請求 然后我們對其進行

處理后給前端返回處理后的結果 這時前端人員就可以根據我們的結果進行一系列的頁面操作 

 

上述代碼 還有不完整處  有時間在補充

沒有對icon圖標的處理  這里如果瀏覽器加載一次后就不會繼續像服務器發送請求了 

會從緩存中讀取的  

還有沒有判斷 既非接口也非靜態文件資源的情況

也就是我們上網時常見的404頁面走丟了那類網頁  所以這里只需加載一個html頁面即可

 

 

整體而言也就這些了  歡迎有不同想法或者思路的人在下方指出  您的評價是我進步的階梯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM