1. 程式人生 > >【node.js】搭建可訪問本地檔案的伺服器①

【node.js】搭建可訪問本地檔案的伺服器①

前言: 學會了如何搭建了伺服器之後,就要開始運用伺服器來訪問靜態檔案了。

一、先上訪問靜態檔案的完整程式碼

(先走下流程,再解析程式碼)

//載入模組
var http = require('http');
var fs = require('fs');
var url = require('url');
var path = require('path')

var server = http.createServer(function(req, res){
	
	var staticPath = path.join(__dirname,'act');    
	var pathObj = url.parse(req.url, true);	        
	var filePath = path.join(staticPath, pathObj.pathname);   													  
	var fileContent = fs.readFileSync(filePath,'binary');	  
	res.write(fileContent,'binary');
	res.end();	
});

server.listen(8080);
console.log('伺服器已開啟, 可以執行 http://localhost:8080');

①、將程式碼複製到server.js檔案中。(我的server.js是放在E盤下的subject檔案中)

②、同時server.js同目錄下建立一個act檔案,用於存放html檔案

③、在act裡面建立一個index.html檔案。(內容大家隨便)。

④、在cmd終端執行server.js(不知道如何執行,可以看我以前寫的“node.js簡易上手”);

⑤、在瀏覽器中輸入http://localhost:8080/index.html。就可以運行了。(如果在chrome瀏覽器執行有問題的朋友,可以在火狐瀏覽器開啟)

二、程式碼分析。

//載入模組
var http = require('http');
var fs = require('fs');
var url = require('url');
var path = require('path')

var server = http.createServer(function(req, res){
	
	//1.__dirname是全域性變數,可以直接獲取。表示當前執行指令碼所在的目錄。(這裡是E:\subject)
	var staticPath = path.join(__dirname,'act');    //path.join方法,拼接目錄地址
	//2.staticPath拼接後的目錄地址,為了跳到自己專案所在那個目錄。(這裡是E:\subject\act)

	//3.req.url請求的連結(這裡輸出的是/index.html)
	var pathObj = url.parse(req.url, true);	        //url.parse方法,解析請求的url,解決連結"\"和"/"的差異問題。
	//4.解析後的req.url是個物件。
	
	//5.從解析後的物件中獲取到pathname(這裡pathObj.pathname是/index.html)
	var filePath = path.join(staticPath, pathObj.pathname);   //path.join方法,拼接完整專案目錄地址。
	//6.fileContent拼接後的專案目錄名字(這裡是E:\subject\act\index.html)
			
	//fs.readFileSync方法,同步讀取檔案資訊														  
	var fileContent = fs.readFileSync(filePath,'binary');	  //讀取拼接完整後的目錄中的檔案, 'binary'表示二進位制方式讀取	
	
	res.write(fileContent,'binary');
	res.end();	
});

server.listen(8080);
console.log('伺服器已開啟, 可以執行 http://localhost:8080');

這裡要注意下的是

var fileContent = fs.readFileSync(filePath,'binary');	

fs.readFileSync()方法是同步讀取檔案資料,如果檔案過大讀取時間會稍長,會導致響應時間過長。(下一篇會給大家分析非同步獲取檔案資料,這樣不會耽誤程序)。

更多內容訪問: