天天看點

NODE.JS根據URL傳回指定的圖檔

我在自學node的過程碰到的一些坑,當時以為隻需将圖檔放在html頁面指定的路徑下,通路該頁面時,圖檔也會擷取到,但是現在想來,或許是伺服器隻提供這個html的檔案,交由用戶端的浏覽器編譯,但是在用戶端裡并不存在該圖檔檔案,是以圖檔自然無法擷取到。在看其他頁面的源代碼後,發現,他們的圖檔路徑都是通過通路網絡資源得到的,是以說,圖檔也應屬于網絡資源,而不是這樣:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<img src="img/NAROTA.jpg"/>
	</body>
</html>
           

那麼怎麼設定網絡資源呢,比如一張png格式的圖檔,我們需要知道,網絡資源首先放在我們的伺服器,是以我們的node.js伺服器中應該在用戶端通路這張圖檔時讀取這張圖檔,然後再傳回給用戶端,下面我們直接貼出代碼,這個是我自己瞎捉摸的,我目前也不知道主流的做法是怎麼樣的,但是還是優化了一下url的解析:

var http=require("http");
var fs=require("fs");
var url=require("url");
//建立一個server的執行個體
var server=http.createServer(function(req,res){
var pathname=url.parse(req.url).pathname;
//當url的ip加端口号的後1到7位為img/png時,傳回以該路徑下對應的png圖檔
if(pathname.substring(1,8)==='img/png'){
		fs.readFile(pathname.substring(1),function(err,data){
		res.writeHead(200,{'Content-Type':'image/png'});
		res.end(data);
	});
}
//jpg同上
if(pathname.substring(1,8)==='img/jpg'){
		fs.readFile(pathname.substring(1),function(err,data){
		res.writeHead(200,{'Content-Type':'image/jpeg'});
		res.end(data);
	});
	}
}).listen(3010);//監聽在3010端口 
console.log('伺服器已開啟......');

           

主要是如何解析url,比如我要通路127.0.0.1:3010這個ip加端口的伺服器,其目錄下的img/png的warn.png這張圖檔,在上述代碼中,我就隻需通路127.0.0.1:3010/img/png/warn.png ,效果如下:

NODE.JS根據URL傳回指定的圖檔

具體思路是,将url中的img/png/xxx.png解析出來作為我們讀取圖檔的參數,這樣做得好處是隻需一條判斷語句即可處理所有的png類型的圖檔。

在node.js中,可以通過writeHead() 方法寫頭,表明該檔案的類型,可以将大部分的檔案類型設定為網絡資源。

下面是一些常用的HTTP Content-Type,希望對大家能有幫助:

檔案字尾名 HTTP Content-Type
.png image/png
.jpg image/jpeg
.html text/html
.webp image/webp
.css text/css
.js text/javascript
.mp4 video/mp4

這是我自己琢磨的處理方式,如果有什麼更好的做法,很希望各位告訴我,表示感謝。

繼續閱讀