node.js基础了解

node.js的特点

单线程    非堵塞I/O    事件驱动

node,js模块化

在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,data)

        err:表示在读取过程中可能出现的异常 如果有异常发生 此时err是一个异常对象 如果没有异常发生 err是null

        data:表示在读取成功的时候读到的内容 如果有异常发生 此时data为null  如果没有异常发生 data是读到的内容 

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,data)

        err:表示在读取过程中可能出现的异常 如果有异常发生 此时err是一个异常对象 如果没有异常发生 errnull

        data:表示在读取成功的时候读到的内容 如果有异常发生 此时data为null  如果没有异常发生 data是读到的内容 

// 当运行此文件时 要将同级目录下的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,data)

        err:表示在读取过程中可能出现的异常 如果有异常发生 此时err是一个异常对象 如果没有异常发生 errnull

        data:表示在读取成功的时候读到的内容 如果有异常发生 此时data为null  如果没有异常发生 data是读到的内容 

// 创建目录
// 引入fs模块
var fs = require("fs");
// 调用对应的fs.mkdir
fs.mkdir("html", function(err) {
	console.log(err);
});

删除文件夹(只能删除空文件夹)

fs.rmdir(filePath,callback)

    filePath:文件路径

    callback(err,data)

        err:表示在读取过程中可能出现的异常 如果有异常发生 此时err是一个异常对象 如果没有异常发生 errnull

        data:表示在读取成功的时候读到的内容 如果有异常发生 此时data为null  如果没有异常发生 data是读到的内容 

// 引入fs模块
var fs = require("fs");
// 调用rmdir
fs.rmdir("html", function(err) {
	console.log(err);
});
// 该方法只可以删除空目录 

读取文件夹

fs.readdir(filePath,callback)

    filePath:文件路径

    callback(err,data)

        err:表示在读取过程中可能出现的异常 如果有异常发生 此时err是一个异常对象 如果没有异常发生 errnull

        data:表示在读取成功的时候读到的内容 如果有异常发生 此时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());
});

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);

猜你喜欢

转载自blog.csdn.net/thunderevil35/article/details/80782722