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

