node.js基礎了解
node.js的特點
單線程:只有一個線程執行任務
非堵塞I/O:在I/O耗時操作時,線程不堵塞
事件驅動:使用事件驅動程序往下繼續運行
node,js模塊化
規范:遵循common.js規范
加載模塊的時候同步。當遇到require() 語句時,會停下來等加載完成然后繼續往下執行。
暴露模塊的時候推薦通過exports.xx = 或 module.exports.xx = 或 module.exports = 向外暴露。
在node,js中,每一個JS文件就是一個模塊
在node,js中,分為內置核心模塊 和 自定義模塊(或者第三方模塊)
內置核心模塊:
這些模塊是node,js自帶的,比如http url querystring fs(FileSystem)
引入方式:直接調用名稱引入
var http = require("http");
var url = require("url");
var fs = require("fs");
自定義模塊(或者第三方模塊):
引入方式:使用“./”開頭 加上 名稱
//在A.js文件中
var b = require("./B");
注意:
但是假如自定義模塊(或者第三方模塊)放在node_modules目錄下,放進去的模塊就跟內置核心模塊一樣的引入方式
//在A.js文件中
//因為B.js文件放在了node_modules目錄下,可以直接使用名稱引入
var b = require("B");
這種方式引入,看上去像是引入了核心模塊 其實只是一種假象 moduleA并不是變成了核心模塊 只是引入方式一樣了。
var moduleA = require("moduleA");
當同一級目錄中有node_modules文件夾時,并且里面有moduleA模塊 并且上一級目錄中有node_modules文件夾,里面也有moduleA模塊時,會引用同級目錄下的node_modules文件夾中的模塊
當同級有node_modules文件夾但是沒有moduleA模塊, 但是上級有node_modules文件夾也有moduleA模塊,此時會使用上級的moduleA模塊
// 注意!!!! 這種方式引入,看上去像是引入了核心模塊 其實只是一種假象 moduleA并不是變成了核心模塊 只是引入方式一樣了。
var moduleA = require("moduleA");
// 當同一級目錄中有node_modules文件夾時,并且里面有moduleA模塊 并且上一級目錄中有node_modules文件夾,里面也有moduleA模塊時
// 此時,會引用同級目錄下的node_modules文件夾中的模塊
// 當同級有node_modules文件夾但是沒有moduleA模塊, 但是上級有node_modules文件夾也有moduleA模塊,此時會使用上級的moduleA模塊
模塊暴露:node.js 向外暴露的方式與sea.js一樣,推薦module.exports 或者exports.
module.exports.c = c;
module.exports = c;
exports.c = c;
http模塊
搭建服務器
// 調用createServer來創建服務器
var server = http.createServer(function(req, res) {
})
req對象:請求對象 所有的請求時瀏覽器附加的信息都可以從req身上獲取
req.url 請求對象中url地址的path部分(pathname + search)
注意:url地址的組成部分
req.method 請求對象中請求方式get 還是 post 返回值是大寫
req.connection.remoteAddress 請求對象中訪問服務器的客戶端的IP地址
req.on("data", function(data_chunk){ }) 在處理post請求時,請求數據時
req.on("end", function(){ }) 在處理post請求時,請求數據完畢時
res對象:響應對象 決定返回結果給前端由res決定
res.setHeader( ) 設置響應對象的響應頭
res.end(data) 該方法決定返回內容并掛斷連接
注意:這里的data必須是buffer類型或者字符串類型 buffer類型調用toString()方法
res.write(data) 該方法決定返回內容但是不掛斷連接
res.status 決定響應狀態
監聽服務器
第一個參數:端口號
第二個參數:IP地址
// 將當前服務綁定到某個端口
server.listen(3000, "192.168.2.187");
// HTTP模塊用于搭建服務器
var http = require("http");
// console.log(http);
// 調用createServer來創建服務器
var server = http.createServer(function(req, res) {
// req: request 前端請求對象 所有的請求時瀏覽器附加的信息都可以從req身上獲取
// res: response 后端響應對象 決定返回什么東西給前端由res決定
// 當前函數在每一次前端有請求到達服務器的時候會調用
// console.log(req.url); // 請求url中path部分
// console.log(req.method); // 請求類型
console.log(req.connection.remoteAddress);
})
// console.log(server);
// 將當前服務綁定到某個端口
server.listen(3000, "192.168.2.187");
url模塊
是node.js的內置核心模塊之一,用于解析字符串和url對象
解析字符串
url.parse(str,Boolean)
第一個參數:url字符串
第二個參數:Boolean true深解析 false淺解析
解析url對象
url.format(obj)
// 引入url模塊 它是一個nodejs核心模塊 作用是格式化url字符串變成一個url對象 或者將url對象轉為url字符串
var url = require("url");
// 定義了一個url字符串
var url_str = "http://localhost:3000/html/index.html?a=1&b=2&c=3#aaa";
// 使用url模塊的方法 格式化url_str為一個對象
var url_obj = url.parse(url_str, true);
// console.log(url_obj);
var url_str1 = url.format(url_obj);
console.log(url_str1);
fileSystem文件模塊
創建文件
fs.appendFile(filePath,data,callback)
filePath:創建的文件路徑
data:添加的數據
callback(err)
err:表示在讀取過程中可能出現的異常 如果有異常發生 此時err是一個異常對象 如果沒有異常發生 err是null
var fs = require("fs");
// 調用appendFile方法 創建一個文件
fs.appendFile("/a.txt", "111", function(err) {
});
讀取文件
fs.readFile(filePath,callback)
filePath:文件路徑 “./”+ url的path部分
callback(err,data)
err:表示在讀取過程中可能出現的異常 如果有異常發生 此時err是一個異常對象 如果沒有異常發生 err是null
data:表示在讀取成功的時候讀到的內容 如果有異常發生 此時data為null 如果沒有異常發生 data是讀到的內容
fs.readFile("./index.html", function(err, data) {
// err 表示讀取文件的過程中可能出現的錯誤
// data 表示讀取文件成功時 它是讀到的文件內容
res.end(data);
});
刪除文件
fs.unlink(filePath,callback)
filePath:刪除的文件路徑
callback(err)
err:表示在讀取過程中可能出現的異常 如果有異常發生 此時err是一個異常對象 如果沒有異常發生 err是null
// 當運行此文件時 要將同級目錄下的index.html刪除 請在運行時保證有該文件
// 引入fs模塊
var fs = require("fs");
// 調用unlink 刪除index.html
fs.unlink("./index.html", function(err) {
// err表示刪除的過程中可能出現的異常 如果出現異常那么err是一個對象 如果沒有異常 err是null
console.log(err);
});
創建目錄
fs.mkdir(filePath,callback)
filePath:文件路徑
callback(err)
err:表示在讀取過程中可能出現的異常 如果有異常發生 此時err是一個異常對象 如果沒有異常發生 err是null
// 創建目錄
// 引入fs模塊
var fs = require("fs");
// 調用對應的fs.mkdir
fs.mkdir("html", function(err) {
console.log(err);
});
刪除文件夾(只能刪除空文件夾)
fs.rmdir(filePath,callback)
filePath:文件路徑
callback(err)
err:表示在讀取過程中可能出現的異常 如果有異常發生 此時err是一個異常對象 如果沒有異常發生 err是null
// 引入fs模塊
var fs = require("fs");
// 調用rmdir
fs.rmdir("html", function(err) {
console.log(err);
});
// 該方法只可以刪除空目錄
讀取文件夾
fs.readdir(filePath,callback)
filePath:文件路徑
callback(err,arr)
err:表示在讀取過程中可能出現的異常 如果有異常發生 此時err是一個異常對象 如果沒有異常發生 err是null
arr:表示在讀取成功的時候讀到的內容 如果有異常發生 此時data為null 如果沒有異常發生 data是讀到的內容
// 引入fs
var fs = require("fs");
// 讀取目錄的方法叫做readdir
fs.readdir("相冊", function(err, arr) {
console.log(err);
console.log("*************");
console.log(arr);
});
分辨目錄(文件夾)和文件
fs.stat(filePath,callback)
filePath:文件路徑
callback(err,stat)
err:表示在讀取過程中可能出現的異常 如果有異常發生 此時err是一個異常對象 如果沒有異常發生 err是null
stat:狀態對象 狀態對象有一個方法isDirectory()方法,該方法可以返回一個布爾值表示是否是目錄
// 分辨一個路徑是文件還是文件夾
var fs = require("fs");
// 調用對應的api fs.stat
fs.stat("index.html", function(err, stat) {
console.log("index.html");
console.log(err);
console.log(stat.isDirectory());
});
fs.stat("index.txt", function(err, stat) {
console.log("index.txt");
console.log(err);
console.log(stat.isDirectory());
});
刪除非空文件夾(自定義一個模塊實現功能)
// 引入fs模塊
var fs = require("fs");
// 當前模塊提供一個功能 將一個目錄變成空的 并刪除該目錄
function del(path) {
// 讀取path目錄 獲取內部的所有文件和文件夾名稱
var arr = fs.readdirSync(path);
console.log(arr);
// 挨個判斷里面的每一項是文件還是文件夾
for(var i = 0; i < arr.length; i++) {
// 調用stat的同步方法判定文件的狀態
var stat = fs.statSync(path + "/" + arr[i]);
// 如果是一個文件夾
if(stat.isDirectory()) {
del(path + "/" + arr[i]);
} else {
// 如果是一個文件
fs.unlinkSync(path + "/" + arr[i]);
}
}
// 當代碼執行到這里 說明該路徑下的所有文件和文件夾都已經沒有了
fs.rmdirSync(path);
}
module.exports = del;
重命名文件(更改文件路徑)
fs.rename(oldPath,newPath,callback)
oldPath:舊文件路徑
newPath:新文件路徑
callback(err)
err:表示在讀取過程中可能出現的異常 如果有異常發生 此時err是一個異常對象 如果沒有異常發生 err是null
var fs = require("fs");
fs.rename("./static/index.txt", "./static/index2.txt", function() {
res.end("成功");
})
工作目錄 文件目錄
process.cwd() 該方法返回工作目錄 在哪個目錄下運行的node命令 工作目錄就是哪個
__dirname 該屬性指向被運行的文件所在的目錄
切記: 一定在運行文件的時候 切換到該文件所在目錄下 讓兩個路徑統一。
querystring模塊
該模塊的功能就是將query字符串轉為對象,或者將對象轉為query字符串
// 加載queryString模塊
var qs = require("querystring");
// 定義字符串
var str = "username=王老五&password=123123&sex=男&hobby=乒乓球&hobby=JavaScript";
console.log(qs.parse(str));
靜態服務器
靜態服務器就是指不能夠處理表單,不能夠進行邏輯交互的服務器。只能夠呆板的將服務器上的真實存在的文件提供出來
var http = require("http");
var fs = require("fs");
var url = require("url");
var MIMEType = {
"*" :"application/octet-stream",
"323" :"text/h323",
"acx" :"application/internet-property-stream",
"ai" :"application/postscript",
"aif" :"audio/x-aiff",
"aifc" :"audio/x-aiff",
"aiff" :"audio/x-aiff",
"asf" :"video/x-ms-asf",
"asr" :"video/x-ms-asf",
"asx" :"video/x-ms-asf",
"au" :"audio/basic",
"avi" :"video/x-msvideo",
"axs" :"application/olescript",
"bas" :"text/plain",
"bcpio" :"application/x-bcpio",
"bin" :"application/octet-stream",
"bmp" :"image/bmp",
"c" :"text/plain",
"cat" :"application/vnd.ms-pkiseccat",
"cdf" :"application/x-cdf",
"cer" :"application/x-x509-ca-cert",
"class" :"application/octet-stream",
"clp" :"application/x-msclip",
"cmx" :"image/x-cmx",
"cod" :"image/cis-cod",
"cpio" :"application/x-cpio",
"crd" :"application/x-mscardfile",
"crl" :"application/pkix-crl",
"crt" :"application/x-x509-ca-cert",
"csh" :"application/x-csh",
"css" :"text/css",
"dcr" :"application/x-director",
"der" :"application/x-x509-ca-cert",
"dir" :"application/x-director",
"dll" :"application/x-msdownload",
"dms" :"application/octet-stream",
"doc" :"application/msword",
"dot" :"application/msword",
"dvi" :"application/x-dvi",
"dxr" :"application/x-director",
"eps" :"application/postscript",
"etx" :"text/x-setext",
"evy" :"application/envoy",
"exe" :"application/octet-stream",
"fif" :"application/fractals",
"flr" :"x-world/x-vrml",
"gif" :"image/gif",
"gtar" :"application/x-gtar",
"gz" :"application/x-gzip",
"h" :"text/plain",
"hdf" :"application/x-hdf",
"hlp" :"application/winhlp",
"hqx" :"application/mac-binhex40",
"hta" :"application/hta",
"htc" :"text/x-component",
"htm" :"text/html",
"html" :"text/html",
"htt" :"text/webviewhtml",
"ico" :"image/x-icon",
"ief" :"image/ief",
"iii" :"application/x-iphone",
"ins" :"application/x-internet-signup",
"isp" :"application/x-internet-signup",
"jfif" :"image/pipeg",
"jpe" :"image/jpeg",
"jpeg" :"image/jpeg",
"jpg" :"image/jpeg",
"js" :"application/x-javascript",
"latex" :"application/x-latex",
"lha" :"application/octet-stream",
"lsf" :"video/x-la-asf",
"lsx" :"video/x-la-asf",
"lzh" :"application/octet-stream",
"m13" :"application/x-msmediaview",
"m14" :"application/x-msmediaview",
"m3u" :"audio/x-mpegurl",
"man" :"application/x-troff-man",
"mdb" :"application/x-msaccess",
"me" :"application/x-troff-me",
"mht" :"message/rfc822",
"mhtml" :"message/rfc822",
"mid" :"audio/mid",
"mny" :"application/x-msmoney",
"mov" :"video/quicktime",
"movie" :"video/x-sgi-movie",
"mp2" :"video/mpeg",
"mp3" :"audio/mpeg",
"mpa" :"video/mpeg",
"mpe" :"video/mpeg",
"mpeg" :"video/mpeg",
"mpg" :"video/mpeg",
"mpp" :"application/vnd.ms-project",
"mpv2" :"video/mpeg",
"ms" :"application/x-troff-ms",
"mvb" :"application/x-msmediaview",
"nws" :"message/rfc822",
"oda" :"application/oda",
"p10" :"application/pkcs10",
"p12" :"application/x-pkcs12",
"p7b" :"application/x-pkcs7-certificates",
"p7c" :"application/x-pkcs7-mime",
"p7m" :"application/x-pkcs7-mime",
"p7r" :"application/x-pkcs7-certreqresp",
"p7s" :"application/x-pkcs7-signature",
"pbm" :"image/x-portable-bitmap",
"pdf" :"application/pdf",
"pfx" :"application/x-pkcs12",
"pgm" :"image/x-portable-graymap",
"pko" :"application/ynd.ms-pkipko",
"pma" :"application/x-perfmon",
"pmc" :"application/x-perfmon",
"pml" :"application/x-perfmon",
"pmr" :"application/x-perfmon",
"pmw" :"application/x-perfmon",
"pnm" :"image/x-portable-anymap",
"pot" :"application/vnd.ms-powerpoint",
"ppm" :"image/x-portable-pixmap",
"pps" :"application/vnd.ms-powerpoint",
"ppt" :"application/vnd.ms-powerpoint",
"prf" :"application/pics-rules",
"ps" :"application/postscript",
"pub" :"application/x-mspublisher",
"qt" :"video/quicktime",
"ra" :"audio/x-pn-realaudio",
"ram" :"audio/x-pn-realaudio",
"ras" :"image/x-cmu-raster",
"rgb" :"image/x-rgb",
"rmi" :"audio/mid http://www.dreamdu.com",
"roff" :"application/x-troff",
"rtf" :"application/rtf",
"rtx" :"text/richtext",
"scd" :"application/x-msschedule",
"sct" :"text/scriptlet",
"setpay" :"application/set-payment-initiation",
"setreg" :"application/set-registration-initiation",
"sh" :"application/x-sh",
"shar" :"application/x-shar",
"sit" :"application/x-stuffit",
"snd" :"audio/basic",
"spc" :"application/x-pkcs7-certificates",
"spl" :"application/futuresplash",
"src" :"application/x-wais-source",
"sst" :"application/vnd.ms-pkicertstore",
"stl" :"application/vnd.ms-pkistl",
"stm" :"text/html",
"svg" :"image/svg+xml",
"sv4cpio" :"application/x-sv4cpio",
"sv4crc" :"application/x-sv4crc",
"swf" :"application/x-shockwave-flash",
"t" :"application/x-troff",
"tar" :"application/x-tar",
"tcl" :"application/x-tcl",
"tex" :"application/x-tex",
"texi" :"application/x-texinfo",
"texinfo" :"application/x-texinfo",
"tgz" :"application/x-compressed",
"tif" :"image/tiff",
"tiff" :"image/tiff",
"tr" :"application/x-troff",
"trm" :"application/x-msterminal",
"tsv" :"text/tab-separated-values",
"txt" :"text/plain",
"uls" :"text/iuls",
"ustar" :"application/x-ustar",
"vcf" :"text/x-vcard",
"vrml" :"x-world/x-vrml",
"wav" :"audio/x-wav",
"wcm" :"application/vnd.ms-works",
"wdb" :"application/vnd.ms-works",
"wks" :"application/vnd.ms-works",
"wmf" :"application/x-msmetafile",
"wps" :"application/vnd.ms-works",
"wri" :"application/x-mswrite",
"wrl" :"x-world/x-vrml",
"wrz" :"x-world/x-vrml",
"xaf" :"x-world/x-vrml",
"xbm" :"image/x-xbitmap",
"xla" :"application/vnd.ms-excel",
"xlc" :"application/vnd.ms-excel",
"xlm" :"application/vnd.ms-excel",
"xls" :"application/vnd.ms-excel",
"xlt" :"application/vnd.ms-excel",
"xlw" :"application/vnd.ms-excel",
"xof" :"x-world/x-vrml",
"xpm" :"image/x-xpixmap",
"xwd" :"image/x-xwindowdump",
"z" :"application/x-compress",
"zip" :"application/zip"
}
var server = http.createServer(function(req, res) {
// 靜態服務器: 前端請求什么文件 我們就讀取 . + 路徑
var url_obj = url.parse(req.url);
var pathname = url_obj.pathname;
fs.readFile("." + pathname, function(err, data) {
if(err) {
// 設置編碼
res.setHeader("content-type", "text/plain;charset=utf-8");
// 說明讀取錯誤
res.end("抱歉,您讀取的" + pathname + "文件不存在");
return;
}
// 獲取用戶讀取的文件的后綴名
var extName = pathname.split(".").pop();
res.setHeader("content-type", MIMEType[extName] + ";charset=utf-8");
// 如果代碼能夠執行到這里 說明讀取成功
res.end(data);
});
})
server.listen(3000);
處理get請求
Node處理get請求就是通過獲取req.url并使用url模塊進行處理得到數據。
var http = require("http");
var fs = require("fs");
var url = require("url");
var MIMEType = {
"*" :"application/octet-stream",
"323" :"text/h323",
"acx" :"application/internet-property-stream",
"ai" :"application/postscript",
"aif" :"audio/x-aiff",
"aifc" :"audio/x-aiff",
"aiff" :"audio/x-aiff",
"asf" :"video/x-ms-asf",
"asr" :"video/x-ms-asf",
"asx" :"video/x-ms-asf",
"au" :"audio/basic",
"avi" :"video/x-msvideo",
"axs" :"application/olescript",
"bas" :"text/plain",
"bcpio" :"application/x-bcpio",
"bin" :"application/octet-stream",
"bmp" :"image/bmp",
"c" :"text/plain",
"cat" :"application/vnd.ms-pkiseccat",
"cdf" :"application/x-cdf",
"cer" :"application/x-x509-ca-cert",
"class" :"application/octet-stream",
"clp" :"application/x-msclip",
"cmx" :"image/x-cmx",
"cod" :"image/cis-cod",
"cpio" :"application/x-cpio",
"crd" :"application/x-mscardfile",
"crl" :"application/pkix-crl",
"crt" :"application/x-x509-ca-cert",
"csh" :"application/x-csh",
"css" :"text/css",
"dcr" :"application/x-director",
"der" :"application/x-x509-ca-cert",
"dir" :"application/x-director",
"dll" :"application/x-msdownload",
"dms" :"application/octet-stream",
"doc" :"application/msword",
"dot" :"application/msword",
"dvi" :"application/x-dvi",
"dxr" :"application/x-director",
"eps" :"application/postscript",
"etx" :"text/x-setext",
"evy" :"application/envoy",
"exe" :"application/octet-stream",
"fif" :"application/fractals",
"flr" :"x-world/x-vrml",
"gif" :"image/gif",
"gtar" :"application/x-gtar",
"gz" :"application/x-gzip",
"h" :"text/plain",
"hdf" :"application/x-hdf",
"hlp" :"application/winhlp",
"hqx" :"application/mac-binhex40",
"hta" :"application/hta",
"htc" :"text/x-component",
"htm" :"text/html",
"html" :"text/html",
"htt" :"text/webviewhtml",
"ico" :"image/x-icon",
"ief" :"image/ief",
"iii" :"application/x-iphone",
"ins" :"application/x-internet-signup",
"isp" :"application/x-internet-signup",
"jfif" :"image/pipeg",
"jpe" :"image/jpeg",
"jpeg" :"image/jpeg",
"jpg" :"image/jpeg",
"js" :"application/x-javascript",
"latex" :"application/x-latex",
"lha" :"application/octet-stream",
"lsf" :"video/x-la-asf",
"lsx" :"video/x-la-asf",
"lzh" :"application/octet-stream",
"m13" :"application/x-msmediaview",
"m14" :"application/x-msmediaview",
"m3u" :"audio/x-mpegurl",
"man" :"application/x-troff-man",
"mdb" :"application/x-msaccess",
"me" :"application/x-troff-me",
"mht" :"message/rfc822",
"mhtml" :"message/rfc822",
"mid" :"audio/mid",
"mny" :"application/x-msmoney",
"mov" :"video/quicktime",
"movie" :"video/x-sgi-movie",
"mp2" :"video/mpeg",
"mp3" :"audio/mpeg",
"mpa" :"video/mpeg",
"mpe" :"video/mpeg",
"mpeg" :"video/mpeg",
"mpg" :"video/mpeg",
"mpp" :"application/vnd.ms-project",
"mpv2" :"video/mpeg",
"ms" :"application/x-troff-ms",
"mvb" :"application/x-msmediaview",
"nws" :"message/rfc822",
"oda" :"application/oda",
"p10" :"application/pkcs10",
"p12" :"application/x-pkcs12",
"p7b" :"application/x-pkcs7-certificates",
"p7c" :"application/x-pkcs7-mime",
"p7m" :"application/x-pkcs7-mime",
"p7r" :"application/x-pkcs7-certreqresp",
"p7s" :"application/x-pkcs7-signature",
"pbm" :"image/x-portable-bitmap",
"pdf" :"application/pdf",
"pfx" :"application/x-pkcs12",
"pgm" :"image/x-portable-graymap",
"pko" :"application/ynd.ms-pkipko",
"pma" :"application/x-perfmon",
"pmc" :"application/x-perfmon",
"pml" :"application/x-perfmon",
"pmr" :"application/x-perfmon",
"pmw" :"application/x-perfmon",
"pnm" :"image/x-portable-anymap",
"pot" :"application/vnd.ms-powerpoint",
"ppm" :"image/x-portable-pixmap",
"pps" :"application/vnd.ms-powerpoint",
"ppt" :"application/vnd.ms-powerpoint",
"prf" :"application/pics-rules",
"ps" :"application/postscript",
"pub" :"application/x-mspublisher",
"qt" :"video/quicktime",
"ra" :"audio/x-pn-realaudio",
"ram" :"audio/x-pn-realaudio",
"ras" :"image/x-cmu-raster",
"rgb" :"image/x-rgb",
"rmi" :"audio/mid http://www.dreamdu.com",
"roff" :"application/x-troff",
"rtf" :"application/rtf",
"rtx" :"text/richtext",
"scd" :"application/x-msschedule",
"sct" :"text/scriptlet",
"setpay" :"application/set-payment-initiation",
"setreg" :"application/set-registration-initiation",
"sh" :"application/x-sh",
"shar" :"application/x-shar",
"sit" :"application/x-stuffit",
"snd" :"audio/basic",
"spc" :"application/x-pkcs7-certificates",
"spl" :"application/futuresplash",
"src" :"application/x-wais-source",
"sst" :"application/vnd.ms-pkicertstore",
"stl" :"application/vnd.ms-pkistl",
"stm" :"text/html",
"svg" :"image/svg+xml",
"sv4cpio" :"application/x-sv4cpio",
"sv4crc" :"application/x-sv4crc",
"swf" :"application/x-shockwave-flash",
"t" :"application/x-troff",
"tar" :"application/x-tar",
"tcl" :"application/x-tcl",
"tex" :"application/x-tex",
"texi" :"application/x-texinfo",
"texinfo" :"application/x-texinfo",
"tgz" :"application/x-compressed",
"tif" :"image/tiff",
"tiff" :"image/tiff",
"tr" :"application/x-troff",
"trm" :"application/x-msterminal",
"tsv" :"text/tab-separated-values",
"txt" :"text/plain",
"uls" :"text/iuls",
"ustar" :"application/x-ustar",
"vcf" :"text/x-vcard",
"vrml" :"x-world/x-vrml",
"wav" :"audio/x-wav",
"wcm" :"application/vnd.ms-works",
"wdb" :"application/vnd.ms-works",
"wks" :"application/vnd.ms-works",
"wmf" :"application/x-msmetafile",
"wps" :"application/vnd.ms-works",
"wri" :"application/x-mswrite",
"wrl" :"x-world/x-vrml",
"wrz" :"x-world/x-vrml",
"xaf" :"x-world/x-vrml",
"xbm" :"image/x-xbitmap",
"xla" :"application/vnd.ms-excel",
"xlc" :"application/vnd.ms-excel",
"xlm" :"application/vnd.ms-excel",
"xls" :"application/vnd.ms-excel",
"xlt" :"application/vnd.ms-excel",
"xlw" :"application/vnd.ms-excel",
"xof" :"x-world/x-vrml",
"xpm" :"image/x-xpixmap",
"xwd" :"image/x-xwindowdump",
"z" :"application/x-compress",
"zip" :"application/zip"
}
var server = http.createServer(function(req, res) {
// 靜態服務器: 前端請求什么文件 我們就讀取 . + 路徑
var url_obj = url.parse(req.url);
var pathname = url_obj.pathname;
// 獲取請求方式
var method = req.method.toLowerCase();
// 此時 靜態服務器不足以支持交互功能
// 想要匹配/regist需要單獨判斷
// 所有非文件的請求 都統稱接口
if(pathname === "/aaaaa" && method === "get") {
// 獲取前端提交過來的數據
console.log(decodeURIComponent(req.url));
// 獲取query部分 并轉為對象
var query = url.parse(decodeURIComponent(req.url), true).query;
console.log(query);
return;
}
fs.readFile("." + pathname, function(err, data) {
if(err) {
// 設置編碼
res.setHeader("content-type", "text/plain;charset=utf-8");
// 說明讀取錯誤
res.end("抱歉,您讀取的" + pathname + "文件不存在");
return;
}
// 獲取用戶讀取的文件的后綴名
var extName = pathname.split(".").pop();
res.setHeader("content-type", MIMEType[extName] + ";charset=utf-8");
// 如果代碼能夠執行到這里 說明讀取成功
res.end(data);
});
})
server.listen(3000);
處理post請求
post請求與get請求不一樣,因為post請求攜帶的數據放在請求正文中,而請求正文可攜帶數據沒有上限,所以,很可能一次性傳遞數據傳遞不完。 要多次傳遞。
Nodejs設定了兩個事件 一個是data事件,在每一次數據傳遞過來后觸發。另一個是end事件,在所有數據傳遞完畢之后觸發。后續代碼要寫在end事件中。
var http = require("http");
var fs = require("fs");
var url = require("url");
var MIMEType = {
"*" :"application/octet-stream",
"323" :"text/h323",
"acx" :"application/internet-property-stream",
"ai" :"application/postscript",
"aif" :"audio/x-aiff",
"aifc" :"audio/x-aiff",
"aiff" :"audio/x-aiff",
"asf" :"video/x-ms-asf",
"asr" :"video/x-ms-asf",
"asx" :"video/x-ms-asf",
"au" :"audio/basic",
"avi" :"video/x-msvideo",
"axs" :"application/olescript",
"bas" :"text/plain",
"bcpio" :"application/x-bcpio",
"bin" :"application/octet-stream",
"bmp" :"image/bmp",
"c" :"text/plain",
"cat" :"application/vnd.ms-pkiseccat",
"cdf" :"application/x-cdf",
"cer" :"application/x-x509-ca-cert",
"class" :"application/octet-stream",
"clp" :"application/x-msclip",
"cmx" :"image/x-cmx",
"cod" :"image/cis-cod",
"cpio" :"application/x-cpio",
"crd" :"application/x-mscardfile",
"crl" :"application/pkix-crl",
"crt" :"application/x-x509-ca-cert",
"csh" :"application/x-csh",
"css" :"text/css",
"dcr" :"application/x-director",
"der" :"application/x-x509-ca-cert",
"dir" :"application/x-director",
"dll" :"application/x-msdownload",
"dms" :"application/octet-stream",
"doc" :"application/msword",
"dot" :"application/msword",
"dvi" :"application/x-dvi",
"dxr" :"application/x-director",
"eps" :"application/postscript",
"etx" :"text/x-setext",
"evy" :"application/envoy",
"exe" :"application/octet-stream",
"fif" :"application/fractals",
"flr" :"x-world/x-vrml",
"gif" :"image/gif",
"gtar" :"application/x-gtar",
"gz" :"application/x-gzip",
"h" :"text/plain",
"hdf" :"application/x-hdf",
"hlp" :"application/winhlp",
"hqx" :"application/mac-binhex40",
"hta" :"application/hta",
"htc" :"text/x-component",
"htm" :"text/html",
"html" :"text/html",
"htt" :"text/webviewhtml",
"ico" :"image/x-icon",
"ief" :"image/ief",
"iii" :"application/x-iphone",
"ins" :"application/x-internet-signup",
"isp" :"application/x-internet-signup",
"jfif" :"image/pipeg",
"jpe" :"image/jpeg",
"jpeg" :"image/jpeg",
"jpg" :"image/jpeg",
"js" :"application/x-javascript",
"latex" :"application/x-latex",
"lha" :"application/octet-stream",
"lsf" :"video/x-la-asf",
"lsx" :"video/x-la-asf",
"lzh" :"application/octet-stream",
"m13" :"application/x-msmediaview",
"m14" :"application/x-msmediaview",
"m3u" :"audio/x-mpegurl",
"man" :"application/x-troff-man",
"mdb" :"application/x-msaccess",
"me" :"application/x-troff-me",
"mht" :"message/rfc822",
"mhtml" :"message/rfc822",
"mid" :"audio/mid",
"mny" :"application/x-msmoney",
"mov" :"video/quicktime",
"movie" :"video/x-sgi-movie",
"mp2" :"video/mpeg",
"mp3" :"audio/mpeg",
"mpa" :"video/mpeg",
"mpe" :"video/mpeg",
"mpeg" :"video/mpeg",
"mpg" :"video/mpeg",
"mpp" :"application/vnd.ms-project",
"mpv2" :"video/mpeg",
"ms" :"application/x-troff-ms",
"mvb" :"application/x-msmediaview",
"nws" :"message/rfc822",
"oda" :"application/oda",
"p10" :"application/pkcs10",
"p12" :"application/x-pkcs12",
"p7b" :"application/x-pkcs7-certificates",
"p7c" :"application/x-pkcs7-mime",
"p7m" :"application/x-pkcs7-mime",
"p7r" :"application/x-pkcs7-certreqresp",
"p7s" :"application/x-pkcs7-signature",
"pbm" :"image/x-portable-bitmap",
"pdf" :"application/pdf",
"pfx" :"application/x-pkcs12",
"pgm" :"image/x-portable-graymap",
"pko" :"application/ynd.ms-pkipko",
"pma" :"application/x-perfmon",
"pmc" :"application/x-perfmon",
"pml" :"application/x-perfmon",
"pmr" :"application/x-perfmon",
"pmw" :"application/x-perfmon",
"pnm" :"image/x-portable-anymap",
"pot" :"application/vnd.ms-powerpoint",
"ppm" :"image/x-portable-pixmap",
"pps" :"application/vnd.ms-powerpoint",
"ppt" :"application/vnd.ms-powerpoint",
"prf" :"application/pics-rules",
"ps" :"application/postscript",
"pub" :"application/x-mspublisher",
"qt" :"video/quicktime",
"ra" :"audio/x-pn-realaudio",
"ram" :"audio/x-pn-realaudio",
"ras" :"image/x-cmu-raster",
"rgb" :"image/x-rgb",
"rmi" :"audio/mid http://www.dreamdu.com",
"roff" :"application/x-troff",
"rtf" :"application/rtf",
"rtx" :"text/richtext",
"scd" :"application/x-msschedule",
"sct" :"text/scriptlet",
"setpay" :"application/set-payment-initiation",
"setreg" :"application/set-registration-initiation",
"sh" :"application/x-sh",
"shar" :"application/x-shar",
"sit" :"application/x-stuffit",
"snd" :"audio/basic",
"spc" :"application/x-pkcs7-certificates",
"spl" :"application/futuresplash",
"src" :"application/x-wais-source",
"sst" :"application/vnd.ms-pkicertstore",
"stl" :"application/vnd.ms-pkistl",
"stm" :"text/html",
"svg" :"image/svg+xml",
"sv4cpio" :"application/x-sv4cpio",
"sv4crc" :"application/x-sv4crc",
"swf" :"application/x-shockwave-flash",
"t" :"application/x-troff",
"tar" :"application/x-tar",
"tcl" :"application/x-tcl",
"tex" :"application/x-tex",
"texi" :"application/x-texinfo",
"texinfo" :"application/x-texinfo",
"tgz" :"application/x-compressed",
"tif" :"image/tiff",
"tiff" :"image/tiff",
"tr" :"application/x-troff",
"trm" :"application/x-msterminal",
"tsv" :"text/tab-separated-values",
"txt" :"text/plain",
"uls" :"text/iuls",
"ustar" :"application/x-ustar",
"vcf" :"text/x-vcard",
"vrml" :"x-world/x-vrml",
"wav" :"audio/x-wav",
"wcm" :"application/vnd.ms-works",
"wdb" :"application/vnd.ms-works",
"wks" :"application/vnd.ms-works",
"wmf" :"application/x-msmetafile",
"wps" :"application/vnd.ms-works",
"wri" :"application/x-mswrite",
"wrl" :"x-world/x-vrml",
"wrz" :"x-world/x-vrml",
"xaf" :"x-world/x-vrml",
"xbm" :"image/x-xbitmap",
"xla" :"application/vnd.ms-excel",
"xlc" :"application/vnd.ms-excel",
"xlm" :"application/vnd.ms-excel",
"xls" :"application/vnd.ms-excel",
"xlt" :"application/vnd.ms-excel",
"xlw" :"application/vnd.ms-excel",
"xof" :"x-world/x-vrml",
"xpm" :"image/x-xpixmap",
"xwd" :"image/x-xwindowdump",
"z" :"application/x-compress",
"zip" :"application/zip"
}
var server = http.createServer(function(req, res) {
// 靜態服務器: 前端請求什么文件 我們就讀取 . + 路徑
var url_obj = url.parse(req.url);
var pathname = url_obj.pathname;
// 獲取請求方式
var method = req.method.toLowerCase();
// 匹配/aaaaa post請求
if(pathname === "/aaaaa" && method === "post") {
// 如何得到請求正文中的數據?
// 請求正文與URL的區別就在于攜帶的數據量大小。 URL撐死了2K 也可以一次性獲取。可以同步.
// 考慮到請求正文的容量可能很大。一次性接收不完所有數據,于是node提供了兩個事件。
// data事件: 每當post請求有一次數據傳遞,就會觸發。
// end事件: 每當post請求的最后一次數據傳遞完畢,才會觸發 后續代碼可以寫在end事件內。
var str = "";
req.on("data", function(data_chunk) {
console.log("接受一次數據")
str += data_chunk;
});
req.on("end", function() {
console.log("所有的數據接收完畢")
// console.log(decodeURIComponent(str));
// 后續邏輯寫在這里
})
return;
}
fs.readFile("." + pathname, function(err, data) {
if(err) {
// 設置編碼
res.setHeader("content-type", "text/plain;charset=utf-8");
// 說明讀取錯誤
res.end("抱歉,您讀取的" + pathname + "文件不存在");
return;
}
// 獲取用戶讀取的文件的后綴名
var extName = pathname.split(".").pop();
res.setHeader("content-type", MIMEType[extName] + ";charset=utf-8");
// 如果代碼能夠執行到這里 說明讀取成功
res.end(data);
});
})
server.listen(3000);
舉例:登錄注冊的server.js
// 搭建服務器
var http = require("http");
// 讀取文件
var fs = require("fs");
// 引入url
var url = require("url");
// 引入 querystring模塊
var qs = require("querystring");
// 定義一個MIMEType類型對象
var MIMEType = {
"*" :"application/octet-stream",
"323" :"text/h323",
"acx" :"application/internet-property-stream",
"ai" :"application/postscript",
"aif" :"audio/x-aiff",
"aifc" :"audio/x-aiff",
"aiff" :"audio/x-aiff",
"asf" :"video/x-ms-asf",
"asr" :"video/x-ms-asf",
"asx" :"video/x-ms-asf",
"au" :"audio/basic",
"avi" :"video/x-msvideo",
"axs" :"application/olescript",
"bas" :"text/plain",
"bcpio" :"application/x-bcpio",
"bin" :"application/octet-stream",
"bmp" :"image/bmp",
"c" :"text/plain",
"cat" :"application/vnd.ms-pkiseccat",
"cdf" :"application/x-cdf",
"cer" :"application/x-x509-ca-cert",
"class" :"application/octet-stream",
"clp" :"application/x-msclip",
"cmx" :"image/x-cmx",
"cod" :"image/cis-cod",
"cpio" :"application/x-cpio",
"crd" :"application/x-mscardfile",
"crl" :"application/pkix-crl",
"crt" :"application/x-x509-ca-cert",
"csh" :"application/x-csh",
"css" :"text/css",
"dcr" :"application/x-director",
"der" :"application/x-x509-ca-cert",
"dir" :"application/x-director",
"dll" :"application/x-msdownload",
"dms" :"application/octet-stream",
"doc" :"application/msword",
"dot" :"application/msword",
"dvi" :"application/x-dvi",
"dxr" :"application/x-director",
"eps" :"application/postscript",
"etx" :"text/x-setext",
"evy" :"application/envoy",
"exe" :"application/octet-stream",
"fif" :"application/fractals",
"flr" :"x-world/x-vrml",
"gif" :"image/gif",
"gtar" :"application/x-gtar",
"gz" :"application/x-gzip",
"h" :"text/plain",
"hdf" :"application/x-hdf",
"hlp" :"application/winhlp",
"hqx" :"application/mac-binhex40",
"hta" :"application/hta",
"htc" :"text/x-component",
"htm" :"text/html",
"html" :"text/html",
"htt" :"text/webviewhtml",
"ico" :"image/x-icon",
"ief" :"image/ief",
"iii" :"application/x-iphone",
"ins" :"application/x-internet-signup",
"isp" :"application/x-internet-signup",
"jfif" :"image/pipeg",
"jpe" :"image/jpeg",
"jpeg" :"image/jpeg",
"jpg" :"image/jpeg",
"js" :"application/x-javascript",
"latex" :"application/x-latex",
"lha" :"application/octet-stream",
"lsf" :"video/x-la-asf",
"lsx" :"video/x-la-asf",
"lzh" :"application/octet-stream",
"m13" :"application/x-msmediaview",
"m14" :"application/x-msmediaview",
"m3u" :"audio/x-mpegurl",
"man" :"application/x-troff-man",
"mdb" :"application/x-msaccess",
"me" :"application/x-troff-me",
"mht" :"message/rfc822",
"mhtml" :"message/rfc822",
"mid" :"audio/mid",
"mny" :"application/x-msmoney",
"mov" :"video/quicktime",
"movie" :"video/x-sgi-movie",
"mp2" :"video/mpeg",
"mp3" :"audio/mpeg",
"mpa" :"video/mpeg",
"mpe" :"video/mpeg",
"mpeg" :"video/mpeg",
"mpg" :"video/mpeg",
"mpp" :"application/vnd.ms-project",
"mpv2" :"video/mpeg",
"ms" :"application/x-troff-ms",
"mvb" :"application/x-msmediaview",
"nws" :"message/rfc822",
"oda" :"application/oda",
"p10" :"application/pkcs10",
"p12" :"application/x-pkcs12",
"p7b" :"application/x-pkcs7-certificates",
"p7c" :"application/x-pkcs7-mime",
"p7m" :"application/x-pkcs7-mime",
"p7r" :"application/x-pkcs7-certreqresp",
"p7s" :"application/x-pkcs7-signature",
"pbm" :"image/x-portable-bitmap",
"pdf" :"application/pdf",
"pfx" :"application/x-pkcs12",
"pgm" :"image/x-portable-graymap",
"pko" :"application/ynd.ms-pkipko",
"pma" :"application/x-perfmon",
"pmc" :"application/x-perfmon",
"pml" :"application/x-perfmon",
"pmr" :"application/x-perfmon",
"pmw" :"application/x-perfmon",
"pnm" :"image/x-portable-anymap",
"pot" :"application/vnd.ms-powerpoint",
"ppm" :"image/x-portable-pixmap",
"pps" :"application/vnd.ms-powerpoint",
"ppt" :"application/vnd.ms-powerpoint",
"prf" :"application/pics-rules",
"ps" :"application/postscript",
"pub" :"application/x-mspublisher",
"qt" :"video/quicktime",
"ra" :"audio/x-pn-realaudio",
"ram" :"audio/x-pn-realaudio",
"ras" :"image/x-cmu-raster",
"rgb" :"image/x-rgb",
"rmi" :"audio/mid http://www.dreamdu.com",
"roff" :"application/x-troff",
"rtf" :"application/rtf",
"rtx" :"text/richtext",
"scd" :"application/x-msschedule",
"sct" :"text/scriptlet",
"setpay" :"application/set-payment-initiation",
"setreg" :"application/set-registration-initiation",
"sh" :"application/x-sh",
"shar" :"application/x-shar",
"sit" :"application/x-stuffit",
"snd" :"audio/basic",
"spc" :"application/x-pkcs7-certificates",
"spl" :"application/futuresplash",
"src" :"application/x-wais-source",
"sst" :"application/vnd.ms-pkicertstore",
"stl" :"application/vnd.ms-pkistl",
"stm" :"text/html",
"svg" :"image/svg+xml",
"sv4cpio" :"application/x-sv4cpio",
"sv4crc" :"application/x-sv4crc",
"swf" :"application/x-shockwave-flash",
"t" :"application/x-troff",
"tar" :"application/x-tar",
"tcl" :"application/x-tcl",
"tex" :"application/x-tex",
"texi" :"application/x-texinfo",
"texinfo" :"application/x-texinfo",
"tgz" :"application/x-compressed",
"tif" :"image/tiff",
"tiff" :"image/tiff",
"tr" :"application/x-troff",
"trm" :"application/x-msterminal",
"tsv" :"text/tab-separated-values",
"txt" :"text/plain",
"uls" :"text/iuls",
"ustar" :"application/x-ustar",
"vcf" :"text/x-vcard",
"vrml" :"x-world/x-vrml",
"wav" :"audio/x-wav",
"wcm" :"application/vnd.ms-works",
"wdb" :"application/vnd.ms-works",
"wks" :"application/vnd.ms-works",
"wmf" :"application/x-msmetafile",
"wps" :"application/vnd.ms-works",
"wri" :"application/x-mswrite",
"wrl" :"x-world/x-vrml",
"wrz" :"x-world/x-vrml",
"xaf" :"x-world/x-vrml",
"xbm" :"image/x-xbitmap",
"xla" :"application/vnd.ms-excel",
"xlc" :"application/vnd.ms-excel",
"xlm" :"application/vnd.ms-excel",
"xls" :"application/vnd.ms-excel",
"xlt" :"application/vnd.ms-excel",
"xlw" :"application/vnd.ms-excel",
"xof" :"x-world/x-vrml",
"xpm" :"image/x-xpixmap",
"xwd" :"image/x-xwindowdump",
"z" :"application/x-compress",
"zip" :"application/zip"
}
// 定義一個數組 當做臨時的數據庫
var db = [];
// 調用方法創建服務器
var server = http.createServer(function(req, res) {
var url_obj = url.parse(req.url);
var url_str = url_obj.pathname;
// 請求方式
var type = req.method.toLowerCase();
// 判定注冊路由
if(url_str === "/regist" && type === "post") {
// 設定響應頭
res.setHeader("content-type", "text/plain;charset=utf-8");
// 定義變量 負責接受數據
var str = "";
// 說明是post請求提交
req.on("data", function(data_chunk) {
str += data_chunk;
});
// 設定end事件
req.on("end", function() {
var query = decodeURIComponent(str);
var obj = qs.parse(query);
console.log(obj);
for(var i = 0; i < db.length; i++) {
if(db[i].username === obj.username) {
// 說明有重復的了
res.end("抱歉,用戶名已經被占用");
return;
}
}
// 說明沒有重復的
db.push(obj);
// 將數據放入數組 并且提示用戶 注冊成功
res.end("恭喜,注冊成功");
});
// 中止函數的執行
return;
}
// 判定登錄路由
if(url_str === "/login" && type === "post") {
// 設置響應頭
res.setHeader("content-type", "text/plain;charset=utf-8");
// 定義變量
var data = "";
// 獲取前端提交過來的數據
req.on("data", function(data_chunk) {
data += data_chunk;
});
// 監聽end事件
req.on("end", function() {
console.log(data);
// 獲取解碼后的數據
var obj = qs.parse(decodeURIComponent(data));
console.log(obj);
// 循環與數組中的每一條數據 比較
for(var i = 0; i < db.length; i++) {
if(db[i].username === obj.username && db[i].password === obj.password) {
// 說明登陸成功
// 返回信息給前端
fs.readFile("html/welcome.html", function(err, data) {
if(err) {
console.log("讀取失敗");
return;
}
res.setHeader("content-type", "text/html;charset=utf-8");
res.end(data);
})
return;
}
}
// 如果執行到這里 說明一條數據也沒對上
res.end("抱歉 登錄失敗");
});
return;
}
// 此時,訪問以下任何頁面 都需要登陸
// 獲取文件后綴名
var extName = url_str.slice(url_str.lastIndexOf(".") + 1);
// 一開始,通過req.url進行判定 并單獨讀取
// 后來發現只要是讀取的文件那么與讀取的文件路徑就差一個.
// 強行讀取文件
fs.readFile("." + url_str, function(err, data) {
// 判定 如果err是對象說明文件不存在
if(err) {
res.end("抱歉,讀取的文件" + req.url + "不存在");
return;
}
// 如果出現亂碼 那么要設置content-type響應頭
res.setHeader("content-type", MIMEType[extName] + ";charset=utf-8");
// 如果代碼能夠執行到這里 說明有文件
// 返回給前端
res.end(data);
});
});
// 監聽端口號
server.listen(3000);
node.js cookie
設置cookie
res.setHeader("set-cookie", ["key1=value1" , "key2=value2"]);
獲取cookie
var cookie = req.headers.cookie;
var login_obj = qs.parse(cookie, ";");
舉例:后端如何使用cookie的server.js
// 搭建服務器
var http = require("http");
// 讀取文件
var fs = require("fs");
// 引入url
var url = require("url");
// 引入 querystring模塊
var qs = require("querystring");
// 定義一個MIMEType類型對象
var MIMEType = {
"*" :"application/octet-stream",
"323" :"text/h323",
"acx" :"application/internet-property-stream",
"ai" :"application/postscript",
"aif" :"audio/x-aiff",
"aifc" :"audio/x-aiff",
"aiff" :"audio/x-aiff",
"asf" :"video/x-ms-asf",
"asr" :"video/x-ms-asf",
"asx" :"video/x-ms-asf",
"au" :"audio/basic",
"avi" :"video/x-msvideo",
"axs" :"application/olescript",
"bas" :"text/plain",
"bcpio" :"application/x-bcpio",
"bin" :"application/octet-stream",
"bmp" :"image/bmp",
"c" :"text/plain",
"cat" :"application/vnd.ms-pkiseccat",
"cdf" :"application/x-cdf",
"cer" :"application/x-x509-ca-cert",
"class" :"application/octet-stream",
"clp" :"application/x-msclip",
"cmx" :"image/x-cmx",
"cod" :"image/cis-cod",
"cpio" :"application/x-cpio",
"crd" :"application/x-mscardfile",
"crl" :"application/pkix-crl",
"crt" :"application/x-x509-ca-cert",
"csh" :"application/x-csh",
"css" :"text/css",
"dcr" :"application/x-director",
"der" :"application/x-x509-ca-cert",
"dir" :"application/x-director",
"dll" :"application/x-msdownload",
"dms" :"application/octet-stream",
"doc" :"application/msword",
"dot" :"application/msword",
"dvi" :"application/x-dvi",
"dxr" :"application/x-director",
"eps" :"application/postscript",
"etx" :"text/x-setext",
"evy" :"application/envoy",
"exe" :"application/octet-stream",
"fif" :"application/fractals",
"flr" :"x-world/x-vrml",
"gif" :"image/gif",
"gtar" :"application/x-gtar",
"gz" :"application/x-gzip",
"h" :"text/plain",
"hdf" :"application/x-hdf",
"hlp" :"application/winhlp",
"hqx" :"application/mac-binhex40",
"hta" :"application/hta",
"htc" :"text/x-component",
"htm" :"text/html",
"html" :"text/html",
"htt" :"text/webviewhtml",
"ico" :"image/x-icon",
"ief" :"image/ief",
"iii" :"application/x-iphone",
"ins" :"application/x-internet-signup",
"isp" :"application/x-internet-signup",
"jfif" :"image/pipeg",
"jpe" :"image/jpeg",
"jpeg" :"image/jpeg",
"jpg" :"image/jpeg",
"js" :"application/x-javascript",
"latex" :"application/x-latex",
"lha" :"application/octet-stream",
"lsf" :"video/x-la-asf",
"lsx" :"video/x-la-asf",
"lzh" :"application/octet-stream",
"m13" :"application/x-msmediaview",
"m14" :"application/x-msmediaview",
"m3u" :"audio/x-mpegurl",
"man" :"application/x-troff-man",
"mdb" :"application/x-msaccess",
"me" :"application/x-troff-me",
"mht" :"message/rfc822",
"mhtml" :"message/rfc822",
"mid" :"audio/mid",
"mny" :"application/x-msmoney",
"mov" :"video/quicktime",
"movie" :"video/x-sgi-movie",
"mp2" :"video/mpeg",
"mp3" :"audio/mpeg",
"mpa" :"video/mpeg",
"mpe" :"video/mpeg",
"mpeg" :"video/mpeg",
"mpg" :"video/mpeg",
"mpp" :"application/vnd.ms-project",
"mpv2" :"video/mpeg",
"ms" :"application/x-troff-ms",
"mvb" :"application/x-msmediaview",
"nws" :"message/rfc822",
"oda" :"application/oda",
"p10" :"application/pkcs10",
"p12" :"application/x-pkcs12",
"p7b" :"application/x-pkcs7-certificates",
"p7c" :"application/x-pkcs7-mime",
"p7m" :"application/x-pkcs7-mime",
"p7r" :"application/x-pkcs7-certreqresp",
"p7s" :"application/x-pkcs7-signature",
"pbm" :"image/x-portable-bitmap",
"pdf" :"application/pdf",
"pfx" :"application/x-pkcs12",
"pgm" :"image/x-portable-graymap",
"pko" :"application/ynd.ms-pkipko",
"pma" :"application/x-perfmon",
"pmc" :"application/x-perfmon",
"pml" :"application/x-perfmon",
"pmr" :"application/x-perfmon",
"pmw" :"application/x-perfmon",
"pnm" :"image/x-portable-anymap",
"pot" :"application/vnd.ms-powerpoint",
"ppm" :"image/x-portable-pixmap",
"pps" :"application/vnd.ms-powerpoint",
"ppt" :"application/vnd.ms-powerpoint",
"prf" :"application/pics-rules",
"ps" :"application/postscript",
"pub" :"application/x-mspublisher",
"qt" :"video/quicktime",
"ra" :"audio/x-pn-realaudio",
"ram" :"audio/x-pn-realaudio",
"ras" :"image/x-cmu-raster",
"rgb" :"image/x-rgb",
"rmi" :"audio/mid http://www.dreamdu.com",
"roff" :"application/x-troff",
"rtf" :"application/rtf",
"rtx" :"text/richtext",
"scd" :"application/x-msschedule",
"sct" :"text/scriptlet",
"setpay" :"application/set-payment-initiation",
"setreg" :"application/set-registration-initiation",
"sh" :"application/x-sh",
"shar" :"application/x-shar",
"sit" :"application/x-stuffit",
"snd" :"audio/basic",
"spc" :"application/x-pkcs7-certificates",
"spl" :"application/futuresplash",
"src" :"application/x-wais-source",
"sst" :"application/vnd.ms-pkicertstore",
"stl" :"application/vnd.ms-pkistl",
"stm" :"text/html",
"svg" :"image/svg+xml",
"sv4cpio" :"application/x-sv4cpio",
"sv4crc" :"application/x-sv4crc",
"swf" :"application/x-shockwave-flash",
"t" :"application/x-troff",
"tar" :"application/x-tar",
"tcl" :"application/x-tcl",
"tex" :"application/x-tex",
"texi" :"application/x-texinfo",
"texinfo" :"application/x-texinfo",
"tgz" :"application/x-compressed",
"tif" :"image/tiff",
"tiff" :"image/tiff",
"tr" :"application/x-troff",
"trm" :"application/x-msterminal",
"tsv" :"text/tab-separated-values",
"txt" :"text/plain",
"uls" :"text/iuls",
"ustar" :"application/x-ustar",
"vcf" :"text/x-vcard",
"vrml" :"x-world/x-vrml",
"wav" :"audio/x-wav",
"wcm" :"application/vnd.ms-works",
"wdb" :"application/vnd.ms-works",
"wks" :"application/vnd.ms-works",
"wmf" :"application/x-msmetafile",
"wps" :"application/vnd.ms-works",
"wri" :"application/x-mswrite",
"wrl" :"x-world/x-vrml",
"wrz" :"x-world/x-vrml",
"xaf" :"x-world/x-vrml",
"xbm" :"image/x-xbitmap",
"xla" :"application/vnd.ms-excel",
"xlc" :"application/vnd.ms-excel",
"xlm" :"application/vnd.ms-excel",
"xls" :"application/vnd.ms-excel",
"xlt" :"application/vnd.ms-excel",
"xlw" :"application/vnd.ms-excel",
"xof" :"x-world/x-vrml",
"xpm" :"image/x-xpixmap",
"xwd" :"image/x-xwindowdump",
"z" :"application/x-compress",
"zip" :"application/zip"
}
// 定義一個數組 當做臨時的數據庫
var db = [{username: "wanglaowu", password: "123"}];
// 調用方法創建服務器
var server = http.createServer(function(req, res) {
// 獲取cookie
var cookie = req.headers.cookie;
// 定義用戶姓名
var login_obj = qs.parse(cookie, ";");
var username = login_obj.username;
var password = login_obj.password;
var url_obj = url.parse(req.url);
var url_str = url_obj.pathname;
// 請求方式
var type = req.method.toLowerCase();
// 判定注冊路由
if(url_str === "/regist" && type === "post") {
// 設定響應頭
res.setHeader("content-type", "text/plain;charset=utf-8");
// 定義變量 負責接受數據
var str = "";
// 說明是post請求提交
req.on("data", function(data_chunk) {
str += data_chunk;
});
// 設定end事件
req.on("end", function() {
var query = decodeURIComponent(str);
var obj = qs.parse(query);
// console.log(obj);
for(var i = 0; i < db.length; i++) {
if(db[i].username === obj.username) {
// 說明有重復的了
res.end("抱歉,用戶名已經被占用");
return;
}
}
// 說明沒有重復的
db.push(obj);
// 將數據放入數組 并且提示用戶 注冊成功
res.end("恭喜,注冊成功");
});
// 中止函數的執行
return;
}
// 判定登錄路由
if(url_str === "/login" && type === "post") {
// 設置響應頭
res.setHeader("content-type", "text/plain;charset=utf-8");
// 定義變量
var data = "";
// 獲取前端提交過來的數據
req.on("data", function(data_chunk) {
data += data_chunk;
});
// 監聽end事件
req.on("end", function() {
// console.log(data);
// 獲取解碼后的數據
var obj = qs.parse(decodeURIComponent(data));
// console.log(obj);
// 循環與數組中的每一條數據 比較
for(var i = 0; i < db.length; i++) {
if(db[i].username === obj.username && db[i].password === obj.password) {
// 說明登陸成功
// 返回信息給前端
fs.readFile("html/welcome.html", function(err, data) {
if(err) {
console.log("讀取失敗");
return;
}
// 將用戶名和密碼設置到cookie中去
res.setHeader("set-cookie", ["username=" + obj.username, "password=" + obj.password]);
// 設置響應內容編碼和類型
res.setHeader("content-type", "text/html;charset=utf-8");
// 返回具體的響應內容
res.end(data);
})
return;
}
}
// 如果執行到這里 說明一條數據也沒對上
res.end("抱歉 登錄失敗");
});
return;
}
// 設置welcome.html路由
if(url_str === "/html/welcome.html") {
// 判斷必須要登陸
if(username) {
fs.readFile("html/welcome.html", function(err, data) {
res.setHeader("content-type", "text/html;charset=utf-8");
res.end(data);
});
return
} else {
res.setHeader("content-type", "text/plain;charset=utf-8");
// 沒有登陸
res.end("不登錄 不讓看");
return;
}
}
// 此時,訪問以下任何頁面 都需要登陸
// 獲取文件后綴名
var extName = url_str.slice(url_str.lastIndexOf(".") + 1);
// 一開始,通過req.url進行判定 并單獨讀取
// 后來發現只要是讀取的文件那么與讀取的文件路徑就差一個.
// 強行讀取文件
fs.readFile("." + url_str, function(err, data) {
// 判定 如果err是對象說明文件不存在
if(err) {
res.end("抱歉,讀取的文件" + req.url + "不存在");
return;
}
// 如果出現亂碼 那么要設置content-type響應頭
res.setHeader("content-type", MIMEType[extName] + ";charset=utf-8");
// 如果代碼能夠執行到這里 說明有文件
// 返回給前端
res.end(data);
});
});
// 監聽端口號
server.listen(3000);
智能推薦
node.js基礎回顧
Node.js 應用是由哪幾部分組成的: 引入 required 模塊:我們可以使用 require 指令來載入 Node.js 模塊。 創建服務器:服務器可以監聽客戶端的請求,類似于 Apache 、Nginx 等 HTTP 服務器。 接收請求與響應請求: 服務器很容易創建,客戶端可以使用瀏覽器或終端發送 HTTP 請求,服務器接收請求后返回響應數據。 創建簡單Node.js 應用示例 步驟一:...
node.js基礎介紹
Node.js簡介 Node.js就是運行在服務端的JavaScript,Node.js是基于Chrome JavaScript運行時建立的一個平臺。Node.js是一個時間驅動I/O服務端JavaScript環境,基于Google的V8引擎,V8引擎執行JavaScript的速度的速度非常快,性能非常好。 Node.js安裝 1.windows安裝包(.msi) 32位安裝包下載地址: ...
Node.js基礎篇
一:下載、安裝及 重啟電腦 下載地址:https://nodejs.org/en/download/ 選擇合適的版本下載,安裝的話就是一直下一步,這里就不過多闡述了 安裝完成后進入終端查看是否安裝成功: win+r >>> cmd >>> node -v 或者: win+r >>> cmd >>> n...
node.js基礎入門
為什么學習node.js node.js可以輔助前端開發,代替后端開發(但其還是不能和java比),node.js與php相比來說,他的優點是:性能高,開發效率高,應用范圍廣,其缺點是:新型語言,函數少,ide(開發環境,編譯器)不完善 什么是node.js? node.js是基于chrome v8引擎的JavaScript運行環境。node...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...