node学习笔记(四)

//Node.js标准库提供了http模块,其中封装了一个高效的http服务器和一个简易的http客户端
//http.Server是一个基于事件的HTTP服务器,它的核心由Node.js下层c++部分实现,而接口由//Javascript封装,兼顾了高性能与简易性

//http服务器
var http = require('http');
http.createServer(function(req,res){
    res.writeHead(200,{'Content-Type','text/html'});
    res.write('<h1>hello node</h1>');
    res.end();
}).listen(3000);

//这段代码中http.createServer创建了一个http.Server的实例;
//req(request):请求,res(response):响应
//响应代码200,表示成功;
//指定相应头为{'Content-Type','text/html'};
//然后写入相应体
//最后通过res.end();结束响应并发送
//listen()函数,启动服务器并且监听3000端口

//Event.Emitter提供了以下几个事件
//request:当客户端请求到来时,该事件被触发,提供2个参数req和res,分别是http.ServerRequest和http.ServerResponse的实例,表示请求和响应信息
//connection:当TCP连接建立时该事件被触发,提供一个参数socket为net.Socket的实例,connection的粒度要大于request,因为客户端在keep-alive下可能会在同
//一连接内发送多次请求
//close:当服务器关闭时触发,注意不是用户断开连接时


//http.ServerRequest();是http请求的信息,一般由http.request发送
//由于请求体可能相对较长,需要一定的时间传输,因此http.ServerRequest()提供了3个事件用于控制请求体传输
//data:当请求体到来时触发,该事件提供一个参数chunk,表示接受到的数据,如果该事件没有被监听,那么请求体将会被抛弃,该事件可能会被调用多次
//end:当请体求传输数据完成时,该事件被触发,此后将不会有数据到来
//close:用户当前请求结束时,该事件被触发,不同于end,用户强制中终止了传输,也还是调用close

//http.ServerRequest的属性
//complete    客户端请求是否已经发送完成
//httpVersion    http协议版本,通常是1.0或1.1
//method    如:GET,POST,PUT,DELETE等
//url        原始的请求路径,例如/static/image/x.jpg或/user?name=smile
//headers    http请求头
//trailers    http请求尾(不常见)
//connection    当前http连接套接字,为net.Socket的实例
//socket    connection的别名
//client    client属性的别名


//querystring
//querystring.parse && querystring.stringify
//用法和Json.parse,Json.stringify几乎相同

@querystring.parse;
var str = 'name=smile&age=20&sex=male';

console.log(querystring.parse(str));

//{name:smile,age:20,sex:male};

@querystring.stringify
var querystring = require('querystring');

var str = {name:'smile',parents:['zq','wry'],age:21};
console.log(querystring.stringify(str));

//name=smile&parents=zq&parents=wry&age=21;


//获取get请求内容
var url = require('url');

//ex:
//http://127.0.0.1:3000/user?name=smile
// search: '?name=smile'
// query: { name: 'smile' }
// pathname: '/user'
// path: '/user?name=smile'
// href: '/user?name=smile' }

//其中query就是我们所谓的get请求,
//通过url.parse将原始的path解析为一个对象
//路径是pathname

//获取post请求内容
原文地址:https://www.cnblogs.com/SmileCN/p/3163785.html