http模块所有后端动态语言想要运行都需要先搭建一个服务器。Node.js需要使用原生模块http来构建服务器。加载http模块,调用http.createServer()方法创建服务。该方法接受一个带有两个参数的回调函数,第一个是请求体,第二个是响应体。回调函数中必须使用response.end()方法结束当前请求,否则当前请求会一直处于等待状态。调用listen监听一个端口。//原生模块varhttp=require('http');http.createServer(function(reqeust,response){response.end('HelloNode');}).listen(8080);参数接受——GET和GET请求服务器时,服务器可以通过request.mothod判断当前请求方式,通过request.url获取当前请求的参数。varhttp=require('http');varurl=require('url');http.createServer(function(req,res){varparams=url.parse(req.url,true).query;res.end(params);}).listen(3000);参数接受——POST不同于GET请求,POST请求不能通过url获取。这时候就需要使用请求体的事件监听获取varhttp=require('http');varutil=require('util');varquerystring=require('querystring');http.createServer(function(req,res){//定义一个post变量,用于暂存请求体信息varpost='';//通过req的数据事件监听函数,每当接收到请求体的数据,它会被添加到post变量中req.on('data',function(chunk){post+=chunk;});//结束事件被触发后,post被解析为真正的POST请求格式querystring.parse,然后返回给客户端。req.on('end',function(){post=querystring.parse(post);res.end(util.inspect(post));});}).listen(3000);url模块请求的url是一个字符串类型,url包含很多信息,比如:协议、主机名、端口、路径、参数、锚点等,解析起来会比较麻烦来自字符串的信息。因此,Node.js的原生模块url模块可以轻松解决这个问题。Stringtoobjectformat:url.parse(urlstring,boolean)parameterurlstring:urlbooleaninstringformat:url中有参数,默认参数是字符串,如果这个参数为true,参数会自动传到对象的公共属性href:解析前的完整原始URL,协议名和主机名已经转换为小写协议:请求协议,小写host:url主机名,包括端口信息,小写hostname:主机名,小写port:the主机端口号pathname:URL中的路径,下例中的/onesearch:查询对象,即:queryString,包括前面的问号“?”path:pathname和search的集合query:查询字符串部分(问号后面的字符串部分)中的参数,或者使用querystring.parse()解析后返回的对象hash:锚点部分(即:“#"andthefollowingpart)varurl=require('url');//第二个参数为true=>{a:'index',t:'article',m:'default'}varurlObj=url.parse('http://www.dk-lan.com/one?a=index&t=article&m=default#dk',true);//urlObj.query是一个对象console.log(urlObj);//第二个参数isfalseurlObj=url.parse('http://www.dk-lan.com/one?a=index&t=article&m=default#dk',false);//urlObj.query是一个字符串=>?a=index&t=article&m=defaultconsole.log(urlObj);objecttostringformat:url.format(urlObj)参数urlObj会被格式化如下Processinghref:会被忽略,noprocessingprotocol:不管末尾有没有冒号都会被处理,协议包括http,https,ftp,gopher,文件后缀为://(冒号-斜杠-斜杠)hostname:如果host属性没有定义,则使用该属性port:如果host属性没有定义,则使用该属性host:首选,将替换hostname和portpathname:无论末尾是否有/(斜杠)都会被处理search:将替换查询属性,无论是否有?(问号)在前面,query会按照同样的方式处理:(objecttype;详见querystring)如果没有搜索,就会使用这个属性。hash:不管前面有没有#(井号,锚点),都会进行同样的处理varurl=require('url');varurlObj={firstname:'dk',url:'http://dk-lan.com',lastname:'tom',passowrd:'123456'}varurlString=url.format(urlObj);console.log(urlString);url.resolve当有多个url需要拼接,可以使用url.resolvevarurl=require('url');url.resolve('http://dk-lan.com/','/one')//'http://dk-lan.com/one'querystring查询(参数)模块GET请求参数全部来自URL和URLs都是字符串格式。为了操作方便,可以通过querystring转换格式stringvarstr='firstname=dk&url=http%3A%2F%2Fdk-lan.com&last将字符串格式的参数转换为对象name=tom&passowrd=123456';varparam=querystring.parse(param);//result//{firstname:"dk",url:"http://dk-lan.com",lastname:'tom',passowrd:123456};对象到字符串varquerystring=require('querystring');varobj={firstname:"dk",url:"http://dk-lan.com",lastname:'tom',passowrd:123456};//将对象转换成字符串varparam=querystring.stringify(obj);//result//firstname=dk&url=http%3A%2F%2Fdk-lan.com&lastname=tom&passowrd=123456filemodulefsfrom因为安全,javascript不能操作本地文件,所以文件的处理都会在服务器端处理。Node.js作为后端动态语言,同样具备操作文件的功能。此操作需要Node.jsNative模块:fs。读取文本--异步读取varfs=require('fs');//异步读取//参数一:文件路径,//参数二:读取文件后的回调fs.readFile('demoFile.txt',function(err,data){if(err){returnconsole.error(err);}console.log("异步读取:"+data.toString());});读取文本——同步读取varfs=require('fs');vardata=fs.readFileSync('demoFile.txt');console.log("同步读取:"+data.toString());writetext--overwriteWritevarfs=require('fs');//每次写入文本,都会覆盖之前的文本内容fs.writeFile('input.txt','抵制一切不利于人的动机为了中国和世界和平!',function(err){if(err){returnconsole.error(err);}console.log("数据写入成功!");console.log("--------我是分界线--------------")console.log("读取写入的数据!");fs.readFile('input.txt',function(err,data){if(err){returnconsole.error(err);}console.log("异步读取文件数据:"+data.toString());});});写入文本--追加写入varfs=require('fs');fs.appendFile('input.txt','愿世界和平!',function(err){if(err){returnconsole.error(err);}console.log("数据写入成功!");console.log("--------我是分界线------------")console.log("读取写入的数据!");fs.readFile('input.txt',function(err,data){if(err){returnconsole.error(err);}console.log("异步读取文件数据:"+data.toString());});});读图读图不同于文本,因为可以读出文本使用console。log()直接打印,但是图片需要在浏览器中显示,所以需要先搭建一个web服务,然后在浏览器中渲染以字节读取的图片,图片是以字节读取的渲染的浏览器中的图片没有img标签,所以需要设置响应头为imagevarhttp=require('http');varfs=require('fs');varcontent=fs.readFileSync('001.jpg',"binary");http.createServer(function(request,response){response.writeHead(200,{'Content-Type':'image/jpeg'});response.write(content,"binary");响应.end();}).listen(8888);console.log('服务器运行在http://127.0.0.1:8888/');
