本文首發(fā)于我的博客锨推,這是我的github,歡迎star宦言。
這是一篇
windows
下用node
搭建服務(wù)器的簡(jiǎn)單教程扇单,前端同學(xué)可以將自己的頁(yè)面部署到云上,預(yù)覽網(wǎng)頁(yè)效果會(huì)比較方便奠旺。這里是我的github蜘澜,歡迎來(lái)訪施流。
在將node
服務(wù)部署到云上之前,先搭建一個(gè)本地服務(wù)器鄙信,只要本地的可以跑通瞪醋,將代碼直接放到云上一般是不會(huì)有什么問(wèn)題的。現(xiàn)在我們看下開(kāi)啟服務(wù)的代碼装诡。
代碼比較少银受,大致思路是開(kāi)啟服務(wù)監(jiān)聽(tīng)80
端口。在接收到請(qǐng)求時(shí)鸦采,對(duì)請(qǐng)求的url
進(jìn)行解析蚓土,得到所請(qǐng)求文件的相對(duì)路徑,再拼接為絕對(duì)路徑赖淤。由絕對(duì)路徑對(duì)所請(qǐng)求的文件進(jìn)行查找,如果所請(qǐng)求的文件存在谅河,則使用流將文件寫(xiě)入響應(yīng)體咱旱,否則返回404
。最后響應(yīng)將會(huì)被發(fā)送回瀏覽器绷耍。
'use strict'
var fs = require('fs'),
url = require('url'),
path = require('path'),
http = require('http');
var root = path.resolve(process.argv[2] || '.'); //argv當(dāng)前進(jìn)程命令行參數(shù)數(shù)組
console.log('Static root dir: ' + root);
//創(chuàng)建服務(wù)器
var server = http.createServer(function(request, response) {
// 獲得URL的path吐限,類(lèi)似 '/css/bootstrap.css':
var pathname = url.parse(request.url).pathname;
// 獲得對(duì)應(yīng)的本地文件路徑,類(lèi)似 '/srv/www/css/bootstrap.css':
var filepath = path.join(root, pathname);
// 獲取文件狀態(tài)
fs.stat(filepath, function(err, stats){
if(!err && stats.isFile()) {
console.log('200' + request.url);
//200
response.writeHead(200);
//文件流向response
fs.createReadStream(filepath).pipe(response);
} else {
//出錯(cuò)
console.log('404' + request.url);
response.writeHead(404);
response.end('404 Not Found');
}
});
}).listen(80);
console.log('Server is running at http://127.0.0.1/');
下面具體看下每行代碼:
??首先將需要用到的模塊引入褂始,這些都是node
內(nèi)置的模塊诸典,具體的用法不清楚可以查下API。
var root = path.resolve(process.argv[2] || '.');
process
模塊不必使用reqire
命令加載崎苗,用于返回系統(tǒng)信息狐粱。process.argv
返回命令行參數(shù)組成的數(shù)組,其中前兩項(xiàng)是默認(rèn)的值胆数,第一項(xiàng)是node
安裝的絕對(duì)路徑肌蜻,第二項(xiàng)是腳本文件的絕對(duì)路徑。真正的參數(shù)是從process.argv[2]
開(kāi)始必尼。這里在沒(méi)有輸入?yún)?shù)作為開(kāi)啟服務(wù)的根目錄的時(shí)候蒋搜,默認(rèn)使用當(dāng)前的目錄作為根目錄。
然后使用http.createServer
開(kāi)啟服務(wù)判莉,監(jiān)聽(tīng)80
端口豆挽,瀏覽網(wǎng)頁(yè)服務(wù)默認(rèn)的端口號(hào)都是80
,在瀏覽器訪問(wèn)時(shí)就不需要輸入端口號(hào)了券盅。在監(jiān)聽(tīng)到請(qǐng)求時(shí)帮哈,將請(qǐng)求的url
進(jìn)行分割,得到請(qǐng)求資源的相對(duì)路徑pathname
渗饮,然后和剛剛的根目錄拼接但汞,得到所請(qǐng)求資源的絕對(duì)路徑filepath
宿刮。
??根據(jù)絕對(duì)路徑查找文件,獲取文件狀態(tài)私蕾,如果文件確實(shí)存在僵缺,在向?yàn)g覽器返回的響應(yīng)頭中寫(xiě)入http狀態(tài)200。將文件寫(xiě)入響應(yīng)體踩叭,由于響應(yīng)體response
對(duì)象本身就是流模式磕潮。使用fs.createReadStream(filepath)
創(chuàng)建一個(gè)讀文件流,然后用pipe
將文件寫(xiě)入到響應(yīng)體容贝。如果查找文件不存在自脯,則向響應(yīng)頭中寫(xiě)入404
,返回Not Found
斤富。
開(kāi)啟本地服務(wù):
??將這個(gè)js
文件保存為server.js
膏潮,寫(xiě)一個(gè)簡(jiǎn)單的index.html
文件保存到同一文件夾,在當(dāng)前文件夾運(yùn)行cmd
满力,輸入node server.js
焕参,控制臺(tái)會(huì)顯示服務(wù)開(kāi)啟。在瀏覽器輸入http://127.0.0.1/index.html
油额,如果請(qǐng)求到剛剛寫(xiě)的頁(yè)面叠纷,本地服務(wù)器就搭建成功了。
將服務(wù)器和網(wǎng)站部署到云上:
??網(wǎng)上有好多種服務(wù)器潦嘶,我用的是騰訊云涩嚣,在注冊(cè)購(gòu)買(mǎi)服務(wù)器之后,使用遠(yuǎn)程桌面連接掂僵,安裝node
后航厚,將剛剛的開(kāi)啟服務(wù)代碼和網(wǎng)頁(yè)一并放到服務(wù)器上,用cmd
運(yùn)行服務(wù)器看峻,在自己電腦上用域名或者IP
訪問(wèn)阶淘。服務(wù)要長(zhǎng)期開(kāi)啟的話(huà)可以使用pm2
守護(hù)進(jìn)程,防止服務(wù)意外關(guān)閉互妓,使用npm
安裝npm install -g pm2
溪窒,輸入pm2 start server.js
來(lái)開(kāi)啟服務(wù)。
以上就是本篇博客的所有內(nèi)容了冯勉,如果你有什么想法歡迎到下方留言澈蚌。
參考資料:《廖雪峰的官方網(wǎng)站》