一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - node.js - Node.js之http模塊的用法

Node.js之http模塊的用法

2022-03-10 16:17weixin_39214481 node.js

這篇文章主要介紹了Node.js之http模塊的用法,對Node.js感興趣的同學,可以參考下

前言

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

HTTP協(xié)議

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

HTTP服務器

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

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

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

用Node.js實現(xiàn)一個HTTP服務器程序非常簡單。我們來實現(xiàn)一個最簡單的Web程序hello.js,它對于所有請求,都返回Hello world!:

?
1
2
3
4
5
6
7
8
9
10
11
'use strict';
var http = require('http');// 導入http模塊
 
// 創(chuàng)建http server,并傳入回調(diào)函數(shù)。回調(diào)函數(shù)接收request和response對象
var server = http.createServer(function (request, response){
console.log(request.method + ': ' + request.url);// 獲得HTTP請求的method和url:
response.writeHead(200, {'Content-Type': 'text/html'});// 將HTTP響應200寫入response, 同時設置Content-Type: text/html
response.end('<h1>Hello world!</h1>'); });// 將HTTP響應的HTML內(nèi)容寫入response
server.listen(8080); // 讓服務器監(jiān)聽8080端口
 
console.log('Server is running at http://127.0.0.1:8080/');

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

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

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

Node.js之http模塊的用法

同時,在命令提示符窗口,可以看到程序打印的請求信息:

GET: /

GET: /favicon.ico

這就是我們編寫的第一個HTTP服務器程序!

文件服務器

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

解析URL需要用到Node.js提供的url模塊,它使用起來非常簡單,通過parse()將一個字符串解析為一個Url對象:

?
1
2
3
4
'use strict';
var url = require('url');
 
console.log(url.parse('http://user:[email protected]: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:[email protected]:8080/path/to/file?query=string#hash' }

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

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

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

最后,我們實現(xiàn)一個文件服務器file_server.js:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
'use strict';
var  fs = require('fs'),url = require('url'),path = require('path'),http = require('http');
var root = path.resolve(process.argv[2] || '.');// 從命令行參數(shù)獲取root目錄,默認是當前目錄
console.log('Static root dir: ' + root);
var server = http.createServer(function (request, response){// 創(chuàng)建服務器
var pathname = url.parse(request.url).pathname;// 獲得URL的path,類似 '/css/bootstrap.css'
var filepath = path.join(root, pathname);// 獲得對應的本地文件路徑,類似 '/srv/www/css/bootstrap.css'
fs.stat(filepath, function (err, stats) {if (!err && stats.isFile()) {// 獲取文件狀態(tài)
console.log('200 ' + request.url);// 沒有出錯并且文件存在
response.writeHead(200);// 發(fā)送200響應
// 將文件流導向response:
fs.createReadStream(filepath).pipe(response);   
 
} else {
console.log('404 ' + request.url);// 出錯了或者文件不存在
response.writeHead(404); response.end('404 Not Found'); }  }); }); // 發(fā)送404響應
 
server.listen(8080);
 
console.log('Server is running at http://127.0.0.1:8080/');

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

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

Node.js之http模塊的用法

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

200 /index.html

200 /css/uikit.min.css

200 /js/jquery.min.js

200 /fonts/fontawesome-webfont.woff2

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

練習

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

參考源碼

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

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

以上就是Node.js之http模塊的用法的詳細內(nèi)容,更多關于Node.js的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/weixin_39214481/article/details/82778634

延伸 · 閱讀

精彩推薦
  • node.jslinux服務器快速卸載安裝node環(huán)境(簡單上手)

    linux服務器快速卸載安裝node環(huán)境(簡單上手)

    這篇文章主要介紹了linux服務器快速卸載安裝node環(huán)境(簡單上手),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    mose-x8462022-01-22
  • node.js詳解node.js創(chuàng)建一個web服務器(Server)的詳細步驟

    詳解node.js創(chuàng)建一個web服務器(Server)的詳細步驟

    這篇文章主要介紹了詳解node.js創(chuàng)建一個web服務器(Server)的詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    王佳斌8952021-12-31
  • node.jsNode.js ObjectWrap 的弱引用問題

    Node.js ObjectWrap 的弱引用問題

    最近在寫 Node.js Addon 的過程中,遇到了一個問題,然后發(fā)現(xiàn)是 ObjectWrap 弱引用導致的,本文介紹一下具體的問題和排查過程,以及 ObjectWrap 的使用問題。...

    編程雜技9852022-01-04
  • node.jsNode.js 中如何收集和解析命令行參數(shù)

    Node.js 中如何收集和解析命令行參數(shù)

    這篇文章主要介紹了Node.js 中如何收集和解析命令行參數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    descire8802021-12-28
  • node.js在瀏覽器中,把 Vite 跑起來了!

    在瀏覽器中,把 Vite 跑起來了!

    大家好,我是 ssh,前幾天在推上沖浪的時候,看到 Francois Valdy 宣布他制作了 browser-vite[1],成功把 Vite 成功在瀏覽器中運行起來了。這引起了我的興趣,如...

    前端從進階到入院9282022-01-11
  • node.jsnodejs中使用worker_threads來創(chuàng)建新的線程的方法

    nodejs中使用worker_threads來創(chuàng)建新的線程的方法

    這篇文章主要介紹了nodejs中使用worker_threads來創(chuàng)建新的線程的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友...

    flydean程序那些事8982022-01-06
  • node.jsrequire加載器實現(xiàn)原理的深入理解

    require加載器實現(xiàn)原理的深入理解

    這篇文章主要給大家介紹了關于require加載器實現(xiàn)原理的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    隱冬8462022-03-03
  • node.jsk8s node節(jié)點重新加入master集群的實現(xiàn)

    k8s node節(jié)點重新加入master集群的實現(xiàn)

    這篇文章主要介紹了k8s node節(jié)點重新加入master集群的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    Scarborought13922022-01-22
主站蜘蛛池模板: 美女禁区视频无遮挡免费看 | 日本www午夜色在线视频 | 国产精品久久久久久久久99热 | 国产精品区一区二区免费 | 秋霞在线一级 | 精品国产乱码久久久久久免费流畅 | 亚洲 欧美 中文 日韩 视频 | 国产高清一区二区 | 国产老太婆hd老头 | 奇米影视久久 | 99热资源 | 免费观看美景之屋 | 国产免费资源高清小视频在线观看 | 黄 在线播放 | 俄罗斯美女破苞 | 色戒完整版 | 韩国男女做性全过程视频 | 欧美video丝袜连裤袜bd | 日本丰满大乳乳奶 | 欧美日韩一本 | 男男18视频免费网站 | 日韩一区二区三区不卡视频 | 波多野结衣一区免费作品 | 国产美女做爰免费视频网址 | 日本天堂影院在线播放 | 午夜理论片日本中文在线 | 日日碰碰| 蜜桃视频在线观看官网 | japanesen女同 | 国产精品99在线观看 | 精品一区二区三区免费站 | 亚洲白拍 | 丰满大乳欲妇三级k8 | 亚州中文字幕 | 毛片群 | 二次元美女内裤凹陷太深 | 2018高清国产一道国产 | 久久精品一区 | 国产精品久久久 | 精品国产自在现线久久 | 特黄特级高清免费视频毛片 |