————————————————————————————————————————————————————————————
----------------- 今日份nodeJS複習 -------------------
----- 1.path路徑
----- 2.url網址
----- 3.http協議
----- 4.http模塊
----- 5.網絡服務器
————————————————————————————————————————————————————————————
————————————————
1.path路徑
1.什麼是path模塊?
path是我們nodeJS提供的一個系統模塊,主要用於格式化或者是拼接一個完整的路徑。
2.path模塊的方法
2.1 path.normalize()
- path.normalize() 規範化地址
- 代碼演示
//引入path模塊
const path = require('path');
//先定義一個地址
const p1 = "../../../path../a/./b/../c/1.html";
//p1是一個格式複雜,..和.沒有必要的地址
//使用path.normalize()規範化地址
var p2 = path.normalize(p1);
console.log(p2);
結果:(規範後的路徑)
..\..\..\path..\a\c\1.html
2.2 path.jion()
- path.jion() 拼接路徑
- 代碼演示
//引入path模塊
const path = require('path');
//先定義一個地址
const p1 = "./test/1.html";
//憑藉路徑
const p2 = path.join('code',p1);
console.log(p2);
結果:(拼接後的地址)
code\test\1.html
2.2 path中關於文件名的一些方法
- path.dirname()返回路徑中的目錄名
- path.basename()返回路徑中的文件名和擴展名
- path.extname() 返回路徑中的擴展名
- path.parse() 返回路徑中的每一個部分
- 代碼演示
//引入path模塊
const path = require('path');
//先定義一個地址
const p1 = "../day03/test/1.html";
const dirname = path.dirname(p1);
const basename = path.basename(p1);
const extname = path.extname(p1);
const obj = path.parse(p1);
console.log("目錄名:" + dirname);
console.log("文件名 + 拓展名:" + basename);
console.log("拓展名:" + extname);
console.log(obj)
結果:
目錄名:../day03/test
文件名 + 拓展名:1.html
拓展名:.html
一次性拿到所有的名字
{
root: '',
dir: '../day03/test',
base: '1.html',
ext: '.html',
name: '1'
}
2.url模塊(*)
2.1 什麼是URL?
url是全球統一資源定位符,對網站資源的一種簡介表達形式,也稱爲網址。
2.2 URL的組成?
-
完整結構
協議 : // 用戶名 :密碼 @ 主機名.名.域:端口號/目錄名/文件名.擴展名?參數名=參數值&參數名2=參數值2 # hash地址
-
舉個例子
https://music.163.com/#/search/m/?friend=&s=123&type=1
3.http協議(*)
3.1 什麼是網絡?
- 網絡是一個共享,傳播信息的虛擬平臺。
3.2 什麼是網絡協議?
- 每天有大量的數據在網絡上傳輸,都需要遵守相應的協議,規則就是網絡協議。
3.3 什麼是http協議?
- http(hypertext transfer protocol)文本傳輸協議,傳輸超文本內容,圖片,音頻,視頻等。
- http 規定了數據在服務器與瀏覽器之間傳輸的格式和方式。
3.4 http協議細節?
- 依次請求對應依次應答(響應)。
- 定義了瀏覽器以什麼格式向服務器發送請求。
- 定有了服務器以什麼格式解析瀏覽器發送過來的數據。
- 定義了服務器以什麼格式響應數據給瀏覽器。
- 定義了瀏覽器以什麼格式解析服務器響應的數據。
3.5 軟件開發模式?
- 單機模式:
打開電腦就可以使用,Hbuilder, Wps, Office,畫圖等 - C/S模式(Client/Server)客戶端和服務端
需要下載安裝以後才能連接網絡使用,迅雷,QQ,微信等 - B/S模式(Brower/Server)瀏覽器與服務端
打開瀏覽器就可以使用,不需要安裝, 百度,淘寶,京東等
4.http模塊
4.1http.get()方法?
- get方法用於模仿客戶端從服務器獲取數據。
- 代碼示例:
http.get('url',function(res){
//res 返回的res,接受服務器響應的所有內容
})
const http = require('http');
//get方式請求
http.get('http://baidu.com',res => {
console.log(res);
})
5.網絡服務器
5.1 服務器入門
- 搭建一個簡單的node服務器
/**
* node.js服務器
* 1.引入通信模塊
* 2.創建服務器
* 3.監聽request事件
* 4.監聽端口
*/
const http = require('http');
//創建服務器
const server = http.createServer();
//監聽request的請求時間
server.on('request',(req, res) => {
// req 請求對象 包含客戶端請求的數據 請求頭和請求體
// res 響應對象 包含了所有服務器端發送給客戶端的數據,響應頭和響應體
res.setHeader('Content-Type','text/html;charset=utf-8');
res.write('<h1> Hello Node.js</h1>');
res.write('<p>今天禮拜五</p>');
res.end();
});
//監聽端口
server.listen(88,() => {
console.log('Server is running on 80......');
})
5.2 根據不同的請求返回不同的數據
/**
* 根據不同的請求,返回不同的數據
* 根據用戶請求的url不同,判斷響應不同的數據,實現訪問不同的url返回不同的結果
* 核心:通過req.url 獲取到用戶請求的網址進行判斷
*/
const http = require('http');
//創建服務器
const server = http.createServer();
//監聽request的請求時間
server.on('request', (req, res) => {
// req 請求對象 包含客戶端請求的數據 請求頭和請求體
// res 響應對象 包含了所有服務器端發送給客戶端的數據,響應頭和響應體
res.setHeader('Content-Type', 'text/html;charset=utf-8');
if (req.url === '/') {
res.write('<p>這是首頁</p>')
}
if (req.url === '/article.html') {
res.write('<p>文章列表</p>')
}
if (req.url === '/about.html') {
res.write('<p>個人簡介</p>')
}
res.end();
});
//監聽端口
server.listen(88, () => {
console.log('Server is running on 88......');
})
5.3 http的狀態碼
1.什麼是狀態碼?
http協議規定的服務器響應數據時的狀態編碼,就是狀態碼。
2.常用的狀態碼
- 1xx:表示普通消息,沒有特殊含義
- 2xx:表示服務器相應成功
+ 200 成功 - 3xx:表示重定向
+ 301 永久重定向
+ 302 零時重定向
+ 304 使用緩存(服務器數據沒有更新時) - 4xx: 無法範圍跟
+ 403 權限不足,無法訪問
+ 404 找不到 - 5xx:服務器報錯
+ 500 服務器代碼出錯
+ 502 網關錯誤
+ 501 服務已經奔潰
5.4 MIME類型
5.4.1 什麼是MIME類型?
MIME類型可以認爲是文件類型的表述。
5.4.2 常用的MIME類型
- .html text/html
- .css text/css
- .js text/javascript
- .png image/png
- .mp3 audio/mpeg
- .xml text/xml
- .zip application/x-gzip
- .pdf application/pdf
- 代碼演示
//生成一個html文件
res.writeHead(200,{"Content-Type":"text/html ; charset=utf-8"});
6.接受get方式和post方式的傳值
- 接收get方式的傳值:
nodeJS 獲取get方式的傳值
1.數組方法 split 切割 獲取
1.獲取當前網址url
var url = http://www.login.com/index?name=kang&pass=kjh8619
2.存儲獲取的數據
var GET = {};
3.利用數組方法切割url
1. var arr = url.split("?");
第一次切割
arr[0] = “http://www.login.com/index”
arr[1] = “name=kang&pass=kjh8619”
2. var arr2 = arr[1].split("&");
第二次切割
arr2[0] = “name=kang”
arr2[1] = “pass=kjh8619”
3. for(var i = 0; i < arr2.length; i++){
var arr3 = arr2[i].split("=")
GET[arr3[0]] = arr3[1];
}
第三次切割並且將獲取到的數據保存到GET中。
4.打印出數據
console.log(GET);
輸出結果爲:
E:\node\get>node array
{ name: 'kang', pass: 'kjh8619' }
2.利用querystring獲取get傳值
1.引入querystring模塊
var querystring = require("querystring");
2.獲取到網址的url
var url = "http://www.login.com/index?name=kang&pass=kjh8619";
3.切割url
var arr = url.split("?");
arr[0] = “http://www.login.com/index”
arr[1] = “name=kang&pass=kjh8619”
4.存儲數據
var json = querystring.parse(arr[1]);
5.打印數據
console.log(json);
結果:
[Running] node "e:\node\get\array.js"
{ name: 'kang', pass: 'kjh8619' }
3.利用url模塊獲取數據
1.引入url模塊
var urlLib = require("url");
2.獲取url
var url = "http://www.login.com/index?name=kang&pass=kjh8619";
3.解析url
var obj = urlLib.parse(url);
4.打印解析數據
console.log(obj);
結果:
[Running] node "e:\node\get\array.js"
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.login.com',
port: null,
hostname: 'www.login.com',
hash: null,
search: '?name=kang&pass=kjh8619',
query: 'name=kang&pass=kjh8619',
pathname: '/index',
path: '/index?name=kang&pass=kjh8619',
href: 'http://www.login.com/index?name=kang&pass=kjh8619' }
url模塊解析url時,加入true參數可以同時解析qurey數據;
var urlLib = require("url");
var url = "http://www.login.com/index?name=kang&pass=kjh8619";
var obj = urlLib.parse(url,true);
console.log(obj.query);
結果:
[Running] node "e:\node\get\array.js"
[Object: null prototype] { name: 'kang', pass: 'kjh8619' }
- 接收post方式傳值:
nodeJS 獲取post方式傳值
因爲get的數據值在地址中,大小限制爲32k,而post的數據值在內容裏面保存,所以數據量大,因此post傳值爲一段一段傳輸。
1.引入模塊
1. const http = require("http");
2. const querystring = require("querystring");
2.搭建簡易web服務器
var server = http.createServer(function(req, res){
//因爲post傳值爲一段段,所以獲取到所有的data後要串聯起來,這裏先以字符串串聯爲例子
var str = "";
req.on('data',function(data,){
str += data; //串聯 data 數據
});
//獲取完所有數據後執行req.on(‘end’,function(){})
req.on('end',function(){
var json = querystring.parse(str);
console.log(json);
})
})
server.listen(2021,function(){
console.log("server is running");
})
3.form 表單做 post 提交數據
<form action="http://localhost:2022/aaa" method="POST">
username: <input type="text" name="user"> <br>
password: <input type="password" name="pass"> <br>
<input type="submit" value="login">
4.結果
{ user: 'kang', pass: '123456' }
————————————————————————————————————
寫在後面
隔壁孩子10篇博客node入門而且寫了一個前後端分離項目,你怎麼還在睡覺!!!(四)
express框架學習
express項目說明
express中的路由模塊的講解
響應的一些方法
一個簡單的express項目
——————————————————————————————————
————————————————
————————————————