利用node.js搭建簡單web服務(wù)器的方法教程
前言
使用Nodejs搭建Web服務(wù)器是學(xué)習(xí)Node.js比較全面的入門教程,因為要完成一個簡單的Web服務(wù)器,你需要學(xué)習(xí)Nodejs中幾個比較重要的模塊,比如:http協(xié)議模塊、文件系統(tǒng)、url解析模塊、路徑解析模塊、以及301重定向問題,下面我們就簡單講一下如何來搭建一個簡單的Web服務(wù)器。
早先不使用web服務(wù)器的情況下想要在瀏覽器端訪問本地資源,可以利用firefox瀏覽器,其可以自己啟動一個小型web服務(wù)器。
為了讓剛接觸node的人也能大體看懂,本文的代碼我將盡量簡化。
準(zhǔn)備
首先,需要安裝nodejs,這個可以去官網(wǎng)下載,目前我本地安裝的v0.12版本。
安裝完成后可以通過命令行測試安裝是否成功,輸入:node -v
,應(yīng)該會顯示當(dāng)前安裝node版本號。
本文中用到的模塊,都是nodejs核心模塊,不需要從外部下載,如果有需要,可以使用以下命令安裝:npm install xxx
。
開始
下一步,新建js文件,可以命名為server.js,代碼如下:
var http = require('http'); var url = require('url'); var path = require('path'); var fs = require('fs'); var dir, arg = process.argv[2] || ''; // 命令行第三個參數(shù),用來接收目錄,可為空,相對當(dāng)前server.js文件的目錄名稱 // 比如使用命令 node server debug,意思就是debug文件夾與server.js文件同級 // 且你想以debug文件夾啟動web服務(wù) http.createServer(function (req, res) { var pathname = __dirname + url.parse(req.url).pathname; dir = dir ? dir : pathname; // 記住dir(目錄) pathname = dir ? pathname.replace(dir, dir + arg + '/') : pathname; // 替換文件靜態(tài)路徑 if (path.extname(pathname) == "") { pathname += "/"; } if (pathname.charAt(pathname.length - 1) == "/") { pathname += "index.html"; // 入口文件,此處默認(rèn)index.html } fs.exists(pathname, function (exists) { if (exists) { switch (path.extname(pathname)) { case ".html": res.writeHead(200, {"Content-Type": "text/html"}); break; case ".js": res.writeHead(200, {"Content-Type": "text/javascript"}); break; case ".css": res.writeHead(200, {"Content-Type": "text/css"}); break; case ".gif": res.writeHead(200, {"Content-Type": "image/gif"}); break; case ".jpg": res.writeHead(200, {"Content-Type": "image/jpeg"}); break; case ".png": res.writeHead(200, {"Content-Type": "image/png"}); break; default: res.writeHead(200, {"Content-Type": "application/octet-stream"}); } // res可以自己添加信息來簡單交互 比如可以修改點header信息 或者修改返回的資源數(shù)據(jù) fs.readFile(pathname, function (err, data) { res.end(data); }); } else { res.writeHead(404, {"Content-Type": "text/html"}); res.end("<h1>404 Not Found</h1>"); } }); }).listen(8085, "127.0.0.5"); // 服務(wù)器端口 console.log("server running at http://127.0.0.5:8085/");
啟動
當(dāng)node安裝完成及上述server.js文件也新建好之后。將其與你要訪問的文件夾放在一起,可以放同層或者直接下層。比如,如果你要訪問d:\test\debug文件夾。
你可以先將當(dāng)前文件放入同層或者直接下,然后輸入如下命令啟動web服務(wù):
- 先打開`cmd`,進入server文件所在目錄,比如是`test`目錄;
- 然后輸入:`
node server debug
`(同層), 或者`node server
`(子層), - 此時會提示`
server running at http://127.0.0.5:8085/
`, 表示啟動服務(wù)成功; - 最后打開瀏覽器,進入:`127.0.0.5:8085`,即可訪問此資源。
最后
簡單解釋下上面的代碼。
首先最上面的require表示需要用到那幾個模塊,先引用一下;
arg表示輸入的命令行的第三個參數(shù),上面是做了手動截??;
createServer方法表示創(chuàng)建一個http服務(wù),以函數(shù)為參數(shù),本文代碼中傳入了一個匿名函數(shù);
- req,表示http request(請求)對象,其攜帶著來自客戶端此次http請求的相關(guān)信息,例如請求method、請求query參數(shù)、請求header頭信息等;
- res,表示http response(返回)對象,用來給客戶端返回請求資源用,可以手動添加信息,例如返回的數(shù)據(jù)、返回的頭信息等、返回的code等;
- fs,表示文件資源對象,具體可以訪問nodejs官網(wǎng)的api;
- path,表示資源路徑對象,具體可以訪問nodejs官網(wǎng)的api。
listen表示創(chuàng)建的服務(wù)監(jiān)聽,一旦訪問了此端口,將進入此前的匿名函數(shù)回調(diào)中,將資源返回給客戶端。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。謝謝大家對腳本之家的支持。
相關(guān)文章
Node.js利用debug模塊打印出調(diào)試日志的方法
debug日志打印模塊主要實現(xiàn)功能是帶命名空間(模塊名)、時間戳、色彩輸出日志;將日志寫入文件;瀏覽器端使用;格式化函數(shù);支持自定義方法。下面這篇文章主要介紹了Node.js利用debug模塊打印出調(diào)試日志的方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04如何優(yōu)雅地在Node應(yīng)用中進行錯誤異常處理
這篇文章主要介紹了如何優(yōu)雅地在Node應(yīng)用中進行錯誤處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11nodejs實現(xiàn)的http、https 請求封裝操作示例
這篇文章主要介紹了nodejs實現(xiàn)的http、https 請求封裝操作,結(jié)合實例形式分析了node.js針對http、https 請求的封裝與使用相關(guān)操作技巧,需要的朋友可以參考下2020-02-02koa2 數(shù)據(jù)api中間件設(shè)計模型的實現(xiàn)方法
這篇文章主要介紹了koa2 數(shù)據(jù)api中間件設(shè)計模型的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07nodejs實現(xiàn)的簡單web服務(wù)器功能示例
這篇文章主要介紹了nodejs實現(xiàn)的簡單web服務(wù)器功能,結(jié)合實例形式分析了nodejs構(gòu)建web服務(wù)器的相關(guān)監(jiān)聽、響應(yīng)、數(shù)據(jù)處理等操作技巧,需要的朋友可以參考下2018-03-03