- 如果我們使用PHP來撰寫后端的代碼時,需要Apache或者Nginx的HTTP 服務器,來處理客戶端的請求相應,不過對于Node.js來說,概念完全不一樣了,使用Node.,js時,我們不僅僅在實作一個應用,同時還實作了整個HTTP服務器,
- 我們創建NodeJs專案的時候,路徑不要有中文和空格
- 開發工具建議使用vscode,然后我們安裝nodejs的提示插件:Node Snippets
測驗一下node的http服務器
app.js
//匯入http模塊
const http = require('http');
/*
(req,res)=>{}是一個匿名函式,跟function(req,res){}一樣其實,只不過這這是ES6的寫法罷了
*/
http.createServer((req,res)=>{
console.log(req.url);//列印以下請求看看
//設定回應頭
//狀態碼200,檔案型別html,字符集utf-8
res.writeHead(200,{"Content-type":"text/html;charset='utf-8'"});
res.write('my node.js');
res.end();//結束回應,一定要結束回應,不然客戶端會一直加載,
}).listen(3000);//監聽3000埠
命令列運行app.js
node app.js
瀏覽器輸入:localhost:3000
得到以下頁面

用Chrome進行除錯查看發送了多少個請求
- 終端列印的結果

- 第一個請求

- 第二個請求(說明一下,這個請求是請求網頁開頭那個圖示的)

url模塊
- url模塊可以用來決議url
下面演示一下url模塊
const url = require('url');
var api = 'https://www.baidu.com?name=zhangsan&age=21';
// console.log(url.parse(api));
/*
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'www.baidu.com',
port: null,
hostname: 'www.baidu.com',
hash: null,
search: '?name=zhangsan&age=21',
query: 'name=zhangsan&age=21',
pathname: '/',
path: '/?name=zhangsan&age=21',
href: 'https://www.baidu.com/?name=zhangsan&age=21'
}
*/
//我們再傳遞一個引數true,即可把query封裝成一個物件
// console.log(url.parse(api,true));
/*
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'www.baidu.com',
port: null,
hostname: 'www.baidu.com',
hash: null,
search: '?name=zhangsan&age=21',
query: [Object: null prototype] { name: 'zhangsan', age: '21' },
pathname: '/',
path: '/?name=zhangsan&age=21',
href: 'https://www.baidu.com/?name=zhangsan&age=21'
}
*/
var temp = url.parse(api,true).query;
console.log(temp);//[Object: null prototype] { name: 'zhangsan', age: '21' }
console.log(temp.name);//zhangsan
console.log(temp.age);//21
下面演示在實際node的http服務器中如何使用url模塊
//匯入http模塊
const http = require('http');
//匯入url模塊
const url = require('url');
http.createServer((req,res)=>{
console.log(req.url);//列印以下請求看看
//設定回應頭
//狀態碼200,檔案型別html,字符集utf-8
res.writeHead(200,{"Content-type":"text/html;charset='utf-8'"});
//列印一下req里面有什么
// console.log(req);
/*
req里面有很多很多東西,其中就包括了url
*/
//其中url又有兩條(實際開發中會有很多種情況),我們過濾掉這條
if(req.url != '/favicon.ico'){
var query = url.parse(req.url,true).query;
/*
query = JSON.parse(temp);
這里如果用JSON.parse的話它會報錯,原因是因為傳了個undefined,但明明沒有傳undefined
我也不知道... ...
*/
console.log(query.name);//zhangsan
}
// console.log(temp);//[Object: null prototype] { name: 'zhangsan' }
/*
https://blog.csdn.net/weixin_44710964/article/details/103552999
當出現[Object: null prototype]我們可以先對物件進行JSON字串轉化(JSON.stringify()),
然后再轉化成物件(JSON.parse()),這樣就可以去除了(以下方法對遇到[Object: null prototype]都通用)
*/
//暈,好像還是不行
res.end();//結束回應,一定要結束回應,不然客戶端會一直加載,
}).listen(3000);//監聽3000埠
實際上這種方法官方檔案里面已經列為廢棄的方法了,所以會有一些問題,下面介紹最新的方法,
參考:https://blog.csdn.net/weixin_44710964/article/details/103552999
//匯入url模塊
const url = require('url');
//node官方檔案最新處理url方法
var obj = new URL('http://www.zcq.com/fafe?name=zhangsan&age=18');//前面一定要http://或https://不然報錯
// console.log(obj);
/*
URL {
href: 'http://www.zcq.com/fafe?name=zhangsan&age=18',
origin: 'http://www.zcq.com',
protocol: 'http:',
username: '',
password: '',
host: 'www.zcq.com',
hostname: 'www.zcq.com',
port: '',
pathname: '/fafe',
search: '?name=zhangsan&age=18',
searchParams: URLSearchParams { 'name' => 'zhangsan', 'age' => '18' },
hash: ''
}
*/
// console.log(obj.searchParams);//URLSearchParams { 'name' => 'zhangsan', 'age' => '18' }
//獲取到name和age
console.log(obj.searchParams.get('name'));//zhangsan
console.log(obj.searchParams.get('age'));//18
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301490.html
標籤:其他
