最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js之http模塊的用法

 更新時(shí)間:2021年04月25日 10:53:45   作者:weixin_39214481  
這篇文章主要介紹了Node.js之http模塊的用法,對(duì)Node.js感興趣的同學(xué),可以參考下

前言

Node.js開(kāi)發(fā)的目的就是為了用JavaScript編寫(xiě)Web服務(wù)器程序。因?yàn)镴avaScript實(shí)際上已經(jīng)統(tǒng)治了瀏覽器端的腳本,其優(yōu)勢(shì)就是有世界上數(shù)量最多的前端開(kāi)發(fā)人員。如果已經(jīng)掌握了JavaScript前端開(kāi)發(fā),再學(xué)習(xí)一下如何將JavaScript應(yīng)用在后端開(kāi)發(fā),就是名副其實(shí)的全棧了。

HTTP協(xié)議

要理解Web服務(wù)器程序的工作原理,首先,我們要對(duì)HTTP協(xié)議有基本的了解。如果你對(duì)HTTP協(xié)議不太熟悉,先看一看HTTP協(xié)議簡(jiǎn)介。

HTTP服務(wù)器

要開(kāi)發(fā)HTTP服務(wù)器程序,從頭處理TCP連接,解析HTTP是不現(xiàn)實(shí)的。這些工作實(shí)際上已經(jīng)由Node.js自帶的http模塊完成了。應(yīng)用程序并不直接和HTTP協(xié)議打交道,而是操作http模塊提供的request和response對(duì)象。

request對(duì)象封裝了HTTP請(qǐng)求,我們調(diào)用request對(duì)象的屬性和方法就可以拿到所有HTTP請(qǐng)求的信息;

response對(duì)象封裝了HTTP響應(yīng),我們操作response對(duì)象的方法,就可以把HTTP響應(yīng)返回給瀏覽器。

用Node.js實(shí)現(xiàn)一個(gè)HTTP服務(wù)器程序非常簡(jiǎn)單。我們來(lái)實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的Web程序hello.js,它對(duì)于所有請(qǐng)求,都返回Hello world!:

'use strict';
var http = require('http');// 導(dǎo)入http模塊

// 創(chuàng)建http server,并傳入回調(diào)函數(shù)。回調(diào)函數(shù)接收request和response對(duì)象
var server = http.createServer(function (request, response){
console.log(request.method + ': ' + request.url);// 獲得HTTP請(qǐng)求的method和url:
response.writeHead(200, {'Content-Type': 'text/html'});// 將HTTP響應(yīng)200寫(xiě)入response, 同時(shí)設(shè)置Content-Type: text/html
response.end('<h1>Hello world!</h1>'); });// 將HTTP響應(yīng)的HTML內(nèi)容寫(xiě)入response
server.listen(8080); // 讓服務(wù)器監(jiān)聽(tīng)8080端口

console.log('Server is running at http://127.0.0.1:8080/');

在命令提示符下運(yùn)行該程序,可以看到以下輸出:

$ node hello.js Server is running at http://127.0.0.1:8080/

不要關(guān)閉命令提示符,直接打開(kāi)瀏覽器輸入http://localhost:8080,即可看到服務(wù)器響應(yīng)的內(nèi)容:

同時(shí),在命令提示符窗口,可以看到程序打印的請(qǐng)求信息:

GET: /

GET: /favicon.ico

這就是我們編寫(xiě)的第一個(gè)HTTP服務(wù)器程序!

文件服務(wù)器

讓我們繼續(xù)擴(kuò)展一下上面的Web程序。我們可以設(shè)定一個(gè)目錄,然后讓W(xué)eb程序變成一個(gè)文件服務(wù)器。要實(shí)現(xiàn)這一點(diǎn),我們只需要解析request.url中的路徑,然后在本地找到對(duì)應(yīng)的文件,把文件內(nèi)容發(fā)送出去就可以了。

解析URL需要用到Node.js提供的url模塊,它使用起來(lái)非常簡(jiǎn)單,通過(guò)parse()將一個(gè)字符串解析為一個(gè)Url對(duì)象:

'use strict';
var url = require('url');

console.log(url.parse('http://user:pass@host.com:8080/path/to/file?query=string#hash'));

結(jié)果如下:

Url { protocol: 'http:', slashes: true, auth: 'user:pass', host: 'host.com:8080', port: '8080', hostname: 'host.com', hash: '#hash', search: '?query=string', query: 'query=string', pathname: '/path/to/file', path: '/path/to/file?query=string', href: 'http://user:pass@host.com:8080/path/to/file?query=string#hash' }

處理本地文件目錄需要使用Node.js提供的path模塊,它可以方便地構(gòu)造目錄:

'use strict';
var path = require('path');
var workDir = path.resolve('.');// 解析當(dāng)前目錄('/Users/michael')
var filePath = path.join(workDir, 'pub', 'index.html');// 組合完整的文件路徑:當(dāng)前目錄+'pub'+'index.html'('/Users/michael/pub/index.html')

使用path模塊可以正確處理操作系統(tǒng)相關(guān)的文件路徑。在Windows系統(tǒng)下,返回的路徑類似于C:\Users\michael\static\index.html,這樣,我們就不關(guān)心怎么拼接路徑了。

最后,我們實(shí)現(xiàn)一個(gè)文件服務(wù)器file_server.js:

'use strict';
var  fs = require('fs'),url = require('url'),path = require('path'),http = require('http');
var root = path.resolve(process.argv[2] || '.');// 從命令行參數(shù)獲取root目錄,默認(rèn)是當(dāng)前目錄
console.log('Static root dir: ' + root);
var server = http.createServer(function (request, response){// 創(chuàng)建服務(wù)器
var pathname = url.parse(request.url).pathname;// 獲得URL的path,類似 '/css/bootstrap.css'
var filepath = path.join(root, pathname);// 獲得對(duì)應(yīng)的本地文件路徑,類似 '/srv/www/css/bootstrap.css'
fs.stat(filepath, function (err, stats) {if (!err && stats.isFile()) {// 獲取文件狀態(tài)
console.log('200 ' + request.url);// 沒(méi)有出錯(cuò)并且文件存在
response.writeHead(200);// 發(fā)送200響應(yīng)
// 將文件流導(dǎo)向response:
fs.createReadStream(filepath).pipe(response);    

} else {
console.log('404 ' + request.url);// 出錯(cuò)了或者文件不存在
response.writeHead(404); response.end('404 Not Found'); }  }); }); // 發(fā)送404響應(yīng)

server.listen(8080);

console.log('Server is running at http://127.0.0.1:8080/');

沒(méi)有必要手動(dòng)讀取文件內(nèi)容。由于response對(duì)象本身是一個(gè)Writable Stream,直接用pipe()方法就實(shí)現(xiàn)了自動(dòng)讀取文件內(nèi)容并輸出到HTTP響應(yīng)。

在命令行運(yùn)行node file_server.js /path/to/dir,把/path/to/dir改成你本地的一個(gè)有效的目錄,然后在瀏覽器中輸入http://localhost:8080/index.html:

只要當(dāng)前目錄下存在文件index.html,服務(wù)器就可以把文件內(nèi)容發(fā)送給瀏覽器。觀察控制臺(tái)輸出:

200 /index.html

200 /css/uikit.min.css

200 /js/jquery.min.js

200 /fonts/fontawesome-webfont.woff2

第一個(gè)請(qǐng)求是瀏覽器請(qǐng)求index.html頁(yè)面,后續(xù)請(qǐng)求是瀏覽器解析HTML后發(fā)送的其它資源請(qǐng)求。

練習(xí)

在瀏覽器輸入http://localhost:8080/時(shí),會(huì)返回404,原因是程序識(shí)別出HTTP請(qǐng)求的不是文件,而是目錄。請(qǐng)修改file_server.js;如果遇到請(qǐng)求的路徑是目錄,則自動(dòng)在目錄下依次搜索index.html、default.html,如果找到了,就返回HTML文件的內(nèi)容。

參考源碼

http服務(wù)器代碼(含靜態(tài)網(wǎng)站)

https://github.com/michaelliao/learn-javascript/tree/master/samples/node/http

以上就是Node.js之http模塊的用法的詳細(xì)內(nèi)容,更多關(guān)于Node.js的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解基于Koa2開(kāi)發(fā)微信二維碼掃碼支付相關(guān)流程

    詳解基于Koa2開(kāi)發(fā)微信二維碼掃碼支付相關(guān)流程

    這篇文章主要介紹了詳解基于Koa2開(kāi)發(fā)微信二維碼掃碼支付相關(guān)流程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Node.js、Socket.IO和GPT-4構(gòu)建AI聊天機(jī)器人的項(xiàng)目實(shí)踐

    Node.js、Socket.IO和GPT-4構(gòu)建AI聊天機(jī)器人的項(xiàng)目實(shí)踐

    本文主要介紹了Node.js、Socket.IO和GPT-4構(gòu)建AI聊天機(jī)器人的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 使用node搭建自動(dòng)發(fā)圖文微博機(jī)器人的方法

    使用node搭建自動(dòng)發(fā)圖文微博機(jī)器人的方法

    這篇文章主要介紹了使用node搭建自動(dòng)發(fā)圖文微博機(jī)器人的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程

    Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程

    本文主要介紹了Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • NodeJS 實(shí)現(xiàn)手機(jī)短信驗(yàn)證模塊阿里大于功能

    NodeJS 實(shí)現(xiàn)手機(jī)短信驗(yàn)證模塊阿里大于功能

    這篇文章主要介紹了NodeJS 實(shí)現(xiàn)手機(jī)短信驗(yàn)證模塊阿里大于功能,需要的朋友可以參考下
    2017-06-06
  • node.js解決全局安裝pnpm后無(wú)法使用的問(wèn)題

    node.js解決全局安裝pnpm后無(wú)法使用的問(wèn)題

    在全局安裝pnpm后,如果出現(xiàn)無(wú)法使用的問(wèn)題,一般是由于沒(méi)有添加系統(tǒng)變量導(dǎo)致的,本文就來(lái)介紹一下node.js解決全局安裝pnpm后無(wú)法使用的問(wèn)題,感興趣的可以了解一下
    2024-10-10
  • Node.js實(shí)現(xiàn)注冊(cè)郵箱激活功能的方法示例

    Node.js實(shí)現(xiàn)注冊(cè)郵箱激活功能的方法示例

    現(xiàn)在很多網(wǎng)站都需要有注冊(cè)郵箱激活的功能,本篇文章主要介紹了Node.js實(shí)現(xiàn)注冊(cè)郵箱激活功能的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • nodejs實(shí)現(xiàn)獲取某寶商品分類

    nodejs實(shí)現(xiàn)獲取某寶商品分類

    這篇文章主要介紹了nodejs實(shí)現(xiàn)獲取某寶商品分類,十分的簡(jiǎn)單實(shí)用,進(jìn)入后臺(tái)直接打開(kāi)控制臺(tái),把代碼粘進(jìn)去運(yùn)行就OK了,有需要的小伙伴可以參考下。
    2015-05-05
  • Node.js模塊加載詳解

    Node.js模塊加載詳解

    這篇文章主要介紹了Node.js模塊加載詳解,本文講解了加載核心模塊、加載文件模塊、加載目錄模塊、從文件加載模塊等內(nèi)容,需要的朋友可以參考下
    2014-08-08
  • nodejs中實(shí)現(xiàn)修改用戶路由功能

    nodejs中實(shí)現(xiàn)修改用戶路由功能

    這篇文章主要介紹了nodejs中實(shí)現(xiàn)修改用戶路由功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05

最新評(píng)論

璧山县| 沾化县| 黄陵县| 江达县| 娱乐| 莒南县| 西乌珠穆沁旗| 黄梅县| 福州市| 固镇县| 阿城市| 辽宁省| 涞水县| 鄯善县| 全南县| 博白县| 凉山| 宝山区| 庆云县| 石首市| 左贡县| 射洪县| 泰宁县| 潮州市| 会同县| 罗江县| 华宁县| 荣成市| 富锦市| 威海市| 手机| 墨玉县| 安陆市| 南京市| 威信县| 遂溪县| 太湖县| 吉木乃县| 娄烦县| 曲靖市| 永新县|