首页
/
每日頭條
/
科技
/
如何使用nodejs的fs庫來讀寫文件
如何使用nodejs的fs庫來讀寫文件
更新时间:2026-06-12 16:38:58

前面我們通過文章【Node實戰002:一個簡單的hello world實例 】簡單地了解了下NodeJS搭建Web服務器,這時我們可以在浏覽器通過ip加端口(不帶端口默認訪問80)來訪問我們的Node服務。我們知道一個Web服務一遍都有幾十上百個頁面,當我們訪問不同的地址時會返回不同的頁面内容。但是這裡我們不管輸入任何地址返回的都是“hello world”,這顯然無法滿足我們的業務需求。這是為什麼呢?因為我們在服務中沒有對請求做任何處理,不管你請求任何内容都統一返回“hello world”。

如何使用nodejs的fs庫來讀寫文件(FS文件操作實現請求動态響應文件)1

request

這裡我們需要根據業務需求對請求進行處理,這裡我們就需要來了解一個參數request。request包含了浏覽器的所有請求信息(打印了下有600多行參數信息),其中有個url屬性攜帶的就是前端發來的請求地址。我們可以通過該屬性來判斷當前請求的路由地址,這樣我們就可以根據不同的請求地址來響應不同的内容返回給前端。這時候當我們訪問http://127.0.0.1:8080/a.html就會輸出内容a.html,如果訪問的不在我們定義的路由中就返回404告訴浏覽器頁面沒有找到。

如何使用nodejs的fs庫來讀寫文件(FS文件操作實現請求動态響應文件)2

Html靜态目錄

但是這裡有個問題那就是每添加一條請求我們就需要後台去case一遍做相應的處理,這樣就會出現相當多的case(要是個遇到個成百上千個頁面的項目豈不是要被逼瘋)。而且關鍵的是每次修改都需要重啟服務才會生效,這樣重啟服務不僅影響服務使用也影響用戶體驗。所以這裡我們需要改善下像nginx那樣将文件全部放在html目錄然後根據路由讀取對應的文件,這樣即可以避免一路case判斷也不用重啟服務器。為什麼這樣就不需要重啟服務器呢?因為此時文件的内容并沒有寫在服務器中,而是在請求的時候去讀取文件内容。所以文件的增、删、改并不影響服務器運行,這樣我們就可以像nginx那樣随時發布更新代碼了。

如何使用nodejs的fs庫來讀寫文件(FS文件操作實現請求動态響應文件)3

FS文件操作

Node提供一組标準的文件操作API,直接通過require('fs') 引用該模塊即可使用一系列文件操作的API。讀取文件内容的函數有異步的 fs.readFile() 和同步的 fs.readFileSync(),一般我們都使用異步操作。因為異步性能更高,速度更快而且沒有阻塞,這樣就不會阻礙後面的代碼執行了。這裡我們需要用到fs模塊中的readFile方法,函數原型:fs.readFile(path,[options], [callback(err,data)])。其中參數filename為必填,表示要讀取的文件名。參數options為可選,如表示文件的字符編碼。參數callback是個回調函數,用來接收文件的内容。回調函數的第一個參數為讀取錯誤觸發的信息,第二個參數為成功讀取到的數據。

如何使用nodejs的fs庫來讀寫文件(FS文件操作實現請求動态響應文件)4

總結:

服務器響應用戶請求時不僅有文本信息還會有二進制文件(圖片、視頻、文件等),通過FS模塊我們可以方便快捷地将用戶所需的内容讀取出來并作為響應數據返回給浏覽器。以上内容是小編給大家分享的【Node實戰003:FS文件操作實現請求動态響應】。希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回複大家的。

如何使用nodejs的fs庫來讀寫文件(FS文件操作實現請求動态響應文件)5

為了方便學習,下面附上本文用到的源碼:

var http = require('http') var fs =require('fs') var server=http.createServer() server.on('request',(req,res)=>{ var filename='/html' req.url; fs.readFile(filename,(err,data)=>{ if(err){ res.write('404') } else{ res.end(data) } //res.end(data)相當于res.write(data); res.end(); })}) server.listen(8080,()=>{ console.log('服務器啟動成功了,通過 http://127.0.0.1:8080/ 來進行訪問') })

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
amd 銳龍7 5800h 在天梯排名
amd 銳龍7 5800h 在天梯排名
随着評測解禁,網絡上也湧現出了許多與AMD銳龍R7-5800X3D桌面遊戲處理器的基準測試。然而從網友們的調侃來看,UserBenchmark給出的評價還是頗具娛樂性的。該網站認為,将這枚處理器的3DV-Cache堆疊緩存技術,更多停留在營...
2026-06-12
網盤文件不限速
網盤文件不限速
最近有GitHub開發者公開了一個度盤文件下載器項目,叫【PDown】。長這樣:是的,你沒看錯,除開Pandownload,網盤文件下載又有了新選擇。不過跟Pandownload的大而全不同,PDown的定位比較奇特。怎麼奇特了?别家下載器...
2026-06-12
電腦主機開機時藍色信号燈不亮
電腦主機開機時藍色信号燈不亮
電腦主機開機時藍色信号燈不亮?電腦主機開機時藍色信号燈不亮最有可能是因為内存接觸不良,現在小編就來說說關于電腦主機開機時藍色信号燈不亮?下面内容希望能幫助到你,我們來一起看看吧!電腦主機開機時藍色信号燈不亮電腦主機開機時藍色信号燈不亮最有可...
2026-06-12
濟南市電動車充電服務
濟南市電動車充電服務
齊魯網·閃電新聞6月19日訊等火車,手機沒電了怎麼辦?是靠随身帶的充電寶,還是帶着充電線到火車站充電區排隊充電?近日,有網友在濟南火車站候車時發現,候車室有一部分座椅已經換成新的了,而且新座椅不僅有顯示屏還自帶手機充電線。這要是真的,濟南站...
2026-06-12
4399現在有哪些遊戲
4399現在有哪些遊戲
有一個網站十分特殊,它幾乎承載了一個年代人的青春回憶。它就是4399網站作為一代人的紀念,在手遊尚未出現的年代,4399網站可謂是一代人的快樂寶庫火的一塌糊塗。巅峰時期用戶超過4億,被大家稱為“中國最好玩的網站”。如今大家猛然發現4399怎...
2026-06-12
Copyright 2023-2026 - www.tftnews.com All Rights Reserved