• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 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是一個異常對象 如果沒有異常發生 errnull

    // 當運行此文件時 要將同級目錄下的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是一個異常對象 如果沒有異常發生 errnull

    // 創建目錄
    // 引入fs模塊
    var fs = require("fs");
    // 調用對應的fs.mkdir
    fs.mkdir("html", function(err) {
    	console.log(err);
    });

    刪除文件夾(只能刪除空文件夾)

    fs.rmdir(filePath,callback)

        filePath:文件路徑

        callback(err)

            err:表示在讀取過程中可能出現的異常 如果有異常發生 此時err是一個異常對象 如果沒有異常發生 errnull

    // 引入fs模塊
    var fs = require("fs");
    // 調用rmdir
    fs.rmdir("html", function(err) {
    	console.log(err);
    });
    // 該方法只可以刪除空目錄 

    讀取文件夾

    fs.readdir(filePath,callback)

        filePath:文件路徑

        callback(err,arr)

            err:表示在讀取過程中可能出現的異常 如果有異常發生 此時err是一個異常對象 如果沒有異常發生 errnull

            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是一個異常對象 如果沒有異常發生 errnull

            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是一個異常對象 如果沒有異常發生 errnull

    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);
    版權聲明:本文為thunderevil35原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/thunderevil35/article/details/80782722

    智能推薦

    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...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    猜你喜歡

    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_...

    精品国产乱码久久久久久蜜桃不卡