国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

nodejs 如何手動實現服務器

2019-11-19 13:12:33
字體:
來源:轉載
供稿:網友

這是一個連續的node學習筆記, 本文是第一章, 會持續更新, 持續完善

python好用,用久了就會把人的脾氣養起來, nodejs不好用, 但效率很好, 也能徹底治好你的壞脾氣

nodejs的回調是我用過的最蛋疼的編程方式之一, 但也足夠巧妙, 學好node, 對一個程序員而言, 也是一個穩賺不賠的買賣

廢話不多說, 上代碼

 1. 完成環境的搭建, 運行一個正則,提取字符串中的數字

let numRe = //d+/g;console.log("123dsgfas 12434 sdfasdf234dagsdfg".match(numRe));

 

nodejs的語法和瀏覽器js的語法非常接近, 安裝好node后, 可以寫個正則, 測試一下環境是否安裝成功, 通過atom的script插件容易造成端口占用,建議學習過程中用命令行工具執行node腳本, 如 node HelloWorld.js

2. http模塊開啟一個服務

const http = require("http")//開啟一個監聽8080端口的靜態服務http.createServer(function(req, res){ console.log("==>", req.url); if (req.url === "/1.html"){  res.write("you have request 1.html"); }else if (req.url === "/2.html") {  res.write("you have request 2.html"); }else{  res.write("404(page not found)"); } res.end();}).listen(8080)

開啟服務,分三步:

第一步: 引入模塊
第二步: 調用模塊http.createServer
第三步: 監聽端口http.createServer(function(req, res){}).listen(8080)

3. fs模塊讀寫文件

const fs = require("fs");// 寫入文件fs.writeFile("HelloWorld.txt", "HelloWorld HelloNode", function(err){ if(err){  console.log(err); } // 讀取剛剛寫入的數據 else{  fs.readFile("HelloWorld.txt", function(err, data) {   if(err){    console.log(err);   }else{    console.log(data.toString());   }  }) }})

簡單讀寫文件非常簡單, 與其它編程語言類似, 把調用方法背過就可以了

4.實現一個靜態http服務器

const http = require("http");const fs = require("fs")http.createServer(function(req, res){ // 打開 www/ 目錄下的文件 fs.readFile("./www/"+req.url, function(err, data) {  if(err){   console.log(err);   res.write("404");   res.end();  }else{   console.log(data.toString())   res.write(data);   res.end();  } })}).listen(8080)

通過了讀取 www/ 目錄下的文件, 實現了靜態資源服務器

5.獲取get數據

const http = require("http");const url = require("url");http.createServer(function(req, res){ let reqObj = url.parse(req.url, true) let urlPath = reqObj.path; let urlData = reqObj.query; let log = "==>urlPath:" + urlPath +"==>>urlData:"+ JSON.stringify(urlData); console.log(log); res.write(log); res.end();}).listen(6060)

解析get請求的參數

6.獲取post數據

const http = require("http");const querystring = require("querystring");http.createServer(function(req, res){ let dataStr = ''; let i = 0; req.on("data", function(data){  dataStr+=data;  console.log(`第${i++}次收到數據`); }) req.on("end", function(){  console.log("end");  let parseData = querystring.parse(dataStr);  console.log("parseData:", parseData);  res.write(new Buffer(dataStr, "utf8"));  res.end(); })}).listen(8800)

解析post請求的參數

小結: 用已有知識 實現簡單的服務器程序

const http = require("http");const fs = require("fs");const querystring = require("querystring");/**1. 訪問www內的靜態資源*2. 解析get請求, 并保存到serverLog.txt*3. 解析post請求serverLog.txt*/// 獲取當前時間function getNowDate(){  let dt = new Date();  let year = dt.getFullYear();  let month = dt.getMonth();  let day = dt.getDate();  // 將月份加1  month = month + 1;  // 將月份補齊到兩位  if (month <= 9){    month = "0" + month;  }  // 將日補齊到兩位  if (day <= 9){    day = "0" + day;  }  let hour = dt.getHours();  let minutes = dt.getMinutes();  let seconds = dt.getSeconds();  return year+"-"+month+"-"+day+"-"+hour+"-"+minutes+"-"+seconds;}http.createServer(function(req, res){ // 1. 嘗試訪問www下的靜態資源 fs.readFile("./www"+req.url, function(err, data){  if(err){   //2. 解析請求的參數, 并保存到log   if(req.method === "GET"){    console.log("收到了GET請求")    let getData = querystring.parse(req.url.split("?")[1]);    console.log("獲得的get數據為==>",getData);    fs.writeFile("./serverLog.txt", getNowDate()+"/n"+JSON.stringify(getData)+"/n", {flag: 'a'},function(err){     if(err){      console.log(err);      console.log("GET數據保存至log出錯");     }    });   }else if (req.method == "POST") {    console.log("收到了POST請求")    let tmpData = ''    req.on("data", function(data){     tmpData+=data;    });    req.on("end", function(){     let postData = querystring.parse(tmpData);     console.log("獲得的post數據為==>", postData);     fs.writeFile("./serverLog.txt",getNowDate()+"/n"+JSON.stringify(postData)+"/n", {flag: 'a'},function(err){      if(err){       console.log(err);       console.log("POST數據保存至log出錯");      }     });    })   }   res.write("404");   res.end();  }else{   res.write(data);   res.end();  } })}).listen(8000)

python測試腳本

import requestsrequests.get("http://127.0.0.1:8000/?name=zhaozhao&age=18&method=GET")requests.post("http://127.0.0.1:8000", data={"name": "zhaozhao", "age": 18, "method": "POST"})

 

 

熟悉了nodejs回調機制, 用原生nodejs寫服務器程序是一件很有效率的事情 , 測試腳本還是requests好用!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台山市| 涿鹿县| 寿光市| 清镇市| 铅山县| 榆树市| 喀喇沁旗| 洪雅县| 邻水| 曲周县| 洞口县| 鲁甸县| 博客| 佛学| 和林格尔县| 随州市| 邵东县| 定陶县| 乌兰察布市| 循化| 淅川县| 甘洛县| 太康县| 昆山市| 无为县| 县级市| 漳平市| 西林县| 太仆寺旗| 乐东| 东乌珠穆沁旗| 永登县| 高尔夫| 班玛县| 临武县| 资阳市| 大城县| 武安市| 黔西| 屯留县| 衢州市|