利用node構建本地服務
首先安裝下node.js,地址為https://nodejs.org/en/,然后安裝npm。
node.js的中文api地址http://nodeapi.ucdok.com/#/api/~
一些模塊的用法可以在自己的終端試試哦,通過node這個命令進入node.js環境。如下圖
利用node構建本地服務,用到的模塊有http、fs、path着三個模塊,其中http是用來創建服務的;fs時文件模塊,可讀寫等本地文件;path是一套用於處理和轉換文件路徑的工具集(具體見http://nodeapi.ucdok.com/#/api/path.html)。
這個構建的原理跟nginx代理訪問本地頁面是一樣的~,將ip(port)映射到本地的靜態資源的路徑,然后根據url的相對路徑找到資源,有點表達的詞不達意~。
說一下簡單的流程
- 利用http模塊的createServer方法起一個服務(可以把request和response打印出來哦,加深理解),listen實現對端口的監聽
- 變量staticUrl保存着我們要訪問的靜態資源的路徑。用path解析url得到相對路徑,把staticUrl與之拼接起來就可以得到絕對路徑了,用強大的fs模塊讀取文件,就ok了
- 有可能url訪問的不適本地的資源~嘿嘿,我們就要做些處理了,類似如404
- 由於加載的html帶有js img css各種不同類型的文件,用過ajax的就知道我們要設置好請求頭了,不過這里我們是將本地的資源返回給瀏覽器這個客戶段,所以我們要設置好響應頭~就建立了一個一個公共的mine.js用來存放文件類型
不多說啦,那就直接看下面的代碼吧~
var http = require('http');
var fs = require('fs');
var path = require('path');
var mine = require('./mine').types; //content-type格式
//靜態資源的路徑
var staticUrl = '/Users/admin/Documents/materials/demo/excise';
var server = http.createServer(function(req,res){
//req,res均為對象,req是http.IncomingMessage的一個實例,res是http.ServerResponse的一個實例
//console.log(res);
var url = req.url;
//瀏覽器輸入localhost:9000/index.html, 那url == '/index.html'
//console.log(url);
var file = staticUrl + url,
type = path.extname(url); //path.extname 返回路徑中文件的擴展名
//console.log(type)
type = type ? type.split('.')[1] : 'unknown';
fs.readFile(file , function(err,data){
if(err){
console.log('訪問'+staticUrl+req.url+'出錯');
res.writeHeader(404,{
'content-type' : 'text/html;charset="utf-8"'
});
res.write('<h1>404錯誤</h1><p>你要找的頁面不存在</p>');
}else{
res.writeHeader(200,{
'content-type' : mine[type] || 'text/html;charset="utf-8"'
});
res.write(data); //將index.html顯示在瀏覽器(客服端)
}
res.end();
});
}).listen(9000);
console.log('服務器開啟成功\n\n訪問路徑為http://localhost:9000/index.html\n');
使用過ajax的筒靴肯定知道contentType,這是對文件類型的設置。由於我們構建的是一個項目的服務,那么文件類型就多了起來,所以建立一個公共的mine.js用來存放文件類型
// 數據格式標簽mime的主要類型
// 參考http://www.w3school.com.cn/media/media_mimeref.asp
/*
application/
text/
image/
audio/
video/
chemical/
message/
multipart/
model/
*/
exports.types = {
"html": "text/html",
"xml": "text/xml",
"js": "text/javascript",
"css": "text/css",
"json": "application/json",
"txt": "text/plain",
"pdf": "application/pdf",
"doc": "application/msword",
"xls": "application/vnd.ms-excel",
"ico": "image/x-icon",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"bmp": "image/bmp",
"svg": "image/svg+xml",
"tiff": "image/tiff",
"gif": "image/gif",
"swf": "application/x-shockwave-flash",
"wav": "audio/x-wav",
"wma": "audio/x-ms-wma",
"mp3": "audio/mpeg",
"wmv": "video/x-ms-wmv",
"avi": "video/x-msvideo",
"gz": "application/x-gzip",
"manifest": "text/cache-manifest"
};