node.js中http模塊和url模塊的簡(jiǎn)單介紹
前言
本文主要給大家介紹了關(guān)于node.js中http模塊與url模塊的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
一、http模塊的簡(jiǎn)單介紹
node.js當(dāng)中的http內(nèi)置模塊可以用于創(chuàng)建http服務(wù)器與http客戶端。
1、引包
const http = require('http');
2、創(chuàng)建http服務(wù)器
var server = http.createServer((req,res)=>{ });
使用http的.createServer()
方法可以用于返回一個(gè)http服務(wù)器實(shí)例,用自定義的server變量來(lái)接收。當(dāng)該服務(wù)器每次接收到客戶端的請(qǐng)求時(shí)觸發(fā)調(diào)用其內(nèi)部的回調(diào)函數(shù),客戶端每訪問(wèn)一次,都會(huì)觸發(fā)調(diào)用一次。該回調(diào)函數(shù)有兩個(gè)參數(shù),req和res,順序不可顛倒,req表示請(qǐng)求request,res表示響應(yīng)response。
該回調(diào)函數(shù)內(nèi)部語(yǔ)句的一定要有res.end();
,因?yàn)槿绻麤](méi)有,瀏覽器會(huì)認(rèn)為一直沒(méi)有得到服務(wù)器的響應(yīng),則瀏覽器一直會(huì)處于被掛起的狀態(tài),此時(shí)瀏覽器內(nèi)部有一個(gè)超時(shí)機(jī)制,一旦超時(shí),則會(huì)報(bào)告錯(cuò)誤。
該回調(diào)函數(shù)當(dāng)中的常用代碼語(yǔ)句有:
設(shè)置響應(yīng)頭,res.writeHead(狀態(tài)碼,{});
其中HTTP狀態(tài)碼常用的有200(成功返回)、404(找不到該頁(yè)面,返回錯(cuò)誤)等。第二個(gè)參數(shù)傳入一個(gè)對(duì)象,用于設(shè)置響應(yīng)文本的渲染解析類(lèi)型。如常用的有對(duì)于html代碼設(shè)置為,res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"});
。對(duì)于css文件的設(shè)置為res.writeHead(200,{"Content-Type":"text/css"});
。對(duì)于圖片的設(shè)置為res.writeHead(200,{"Content-Type":"image/jpg"});
。對(duì)于純文本的設(shè)置為res.writeHead(200,{"Content-Type":"text/plain"});
設(shè)置返回的內(nèi)容,res.write('');
3、讓該服務(wù)器監(jiān)聽(tīng)特定的端口號(hào)
用server這個(gè)自定義的變量來(lái)表示創(chuàng)建的服務(wù)器來(lái)監(jiān)聽(tīng)某個(gè)指定的端口號(hào)。server.listen(3000,'192.168.155.1');
外界客戶端可以通過(guò)這個(gè)ip地址和端口號(hào)來(lái)訪問(wèn)這個(gè)服務(wù)器。
此時(shí)表示該服務(wù)器處于掛起的狀態(tài),此時(shí)在瀏覽器當(dāng)中輸入對(duì)應(yīng)的ip地址與端口號(hào)即可得到服務(wù)端響應(yīng)的內(nèi)容。
二、url模塊的簡(jiǎn)單介紹
const http = require('http'); var server = http.createServer((req,res)=>{ console.log(req.url); res.end(); }); server.listen(3000,'192.168.155.1');
使用node命令開(kāi)啟這個(gè)服務(wù)器時(shí),可以在控制臺(tái)實(shí)時(shí)打印出訪問(wèn)的客戶端的url地址信息。
由于在通過(guò)chrome瀏覽器的方式在進(jìn)行訪問(wèn)時(shí),每次訪問(wèn)都會(huì)默認(rèn)附帶一次/favicon.ico的請(qǐng)求,在解析客戶端真正在瀏覽器的訪問(wèn)地址時(shí),可以做如下處理:
const http = require('http'); var server = http.createServer((req,res)=>{ if(req.url == '/favicon.ico'){ return; }; console.log(req.url); res.end(); }); server.listen(3000,'192.168.155.1');
如上圖所示,我們通過(guò)req.url
可以得到用戶完整的請(qǐng)求地址,我們可以利用內(nèi)置的url模塊對(duì)用戶的請(qǐng)求地址進(jìn)行解析。
1、引包
const url = require('url');
2、常用的是url.parse(req.url)
該方法常用的是把一個(gè)完整的url地址分解為一個(gè)對(duì)象。
const http = require('http'); const url = require('url'); var server = http.createServer((req,res)=>{ if(req.url == '/favicon.ico'){ return; }; console.log(url.parse(req.url)); res.end(); }); server.listen(3000,'192.168.155.1');
其中最常用的是url.parse(req.url).pathname
得到一個(gè)文件路徑的字符串,以/開(kāi)頭,并且不包括查詢部分的內(nèi)容。使用url.parse(req.url).query
可以得到一個(gè)查詢部分的字符串。其中url.parse()
方法的第二個(gè)參數(shù)是true,可以將所有的查詢變?yōu)閷?duì)象形式。
console.log(url.parse(req.url,true).query);
通過(guò)這種方式可以快速得到客戶端通過(guò)GET方式向服務(wù)器提交的數(shù)據(jù)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Node.js使用http模塊實(shí)現(xiàn)后臺(tái)服務(wù)器流程解析
- Node.js?搭建后端服務(wù)器內(nèi)置模塊(?http+url+querystring?的使用)
- Node.js基礎(chǔ)入門(mén)之path模塊,url模塊,http模塊使用詳解
- 基于Node.js的http模塊搭建HTTP服務(wù)器
- node.js使用http模塊創(chuàng)建服務(wù)器和客戶端完整示例
- Node.js進(jìn)階之核心模塊https入門(mén)
- node.js 核心http模塊,起一個(gè)服務(wù)器,返回一個(gè)頁(yè)面的實(shí)例
- Node.js中Request模塊處理HTTP協(xié)議請(qǐng)求的基本使用教程
- Node.js 中 http 模塊的深度剖析與實(shí)戰(zhàn)應(yīng)用小結(jié)
相關(guān)文章
從零學(xué)習(xí)node.js之express入門(mén)(六)
相信大家都知道Express是一個(gè)簡(jiǎn)潔而靈活的 node.js Web應(yīng)用框架, 提供了一系列強(qiáng)大特性幫助你創(chuàng)建各種 Web 應(yīng)用,和豐富的 HTTP 工具。下面這篇文章主要介紹了node.js中express的入門(mén)知識(shí),需要的朋友可以參考下。2017-02-02Mongoose實(shí)現(xiàn)虛擬字段查詢的方法詳解
這篇文章主要給大家介紹了關(guān)于Mongoose實(shí)現(xiàn)虛擬字段查詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08Nodejs學(xué)習(xí)筆記之測(cè)試驅(qū)動(dòng)
本文是本系列文章的第二篇,主要是測(cè)試針對(duì)于web后端的驅(qū)動(dòng),在開(kāi)發(fā)過(guò)程中,在開(kāi)發(fā)完成一段代碼后如果負(fù)責(zé)任而不是說(shuō)完全把問(wèn)題交給測(cè)試人員去發(fā)現(xiàn)的話,這個(gè)時(shí)候通常都會(huì)去做一些手動(dòng)的測(cè)試。2015-04-04