“ 你若安好,便是晴天”
HTTP
—
HTTP协议建立在请求和响应的概念上,对应在Node.js中就是有http.ServerRequest和http.ServerResponse这两个构造器构造出来的对象。
今天我们通过一个简单的web服务器来认识一个HTTP:
首先创建一个项目,在根目录下创建一个package.json文件,内容如下:
{
"name": "http-form",
"version": "0.0.1",
"description": "http test"
}
然后在终端npm install 一下,会输出一个空行,因为现在没有任何依赖。
然后就开始写我们主要的内容了,创建一个index.js文件,内容如下:
//querystring模块能将一个字符串解析成一个对象
var qs = require('querystring');
require('http').createServer(function(req,res){
if('/'== req.url){
res.writeHead(200,{'Content-Type':'text/html'});
// 将响应写在一个数组中,之后拼接成字符串返回
//form表单下的 button 按钮,如果不设置type默认为submit,会自动提交表单
res.end([
'<form method ="POST" action="/url">'
,'<h1>My Form</h1>'
,'<fileset>'
,'<label>Personal information</lable>'
,'<p>what is you name?</p>'
,'<input type="text" name="name"/>'
,'<p><button>Submit</button></p>'
,'</form>'
].join(''));
}else if('/url'== req.url && 'POST' == req.method){
//node.js允许在数据到达服务器是就可以对其进行处理。因为数据是以不同的TCP包到达服务器的
//创建一个空字符串接收数据,当end的时候,数据接收完全
var body ='';
req.on('data',function(chunk){
body += chunk;
})
req.on('end',function(){
//表单内容经过编码 所以req.headers['content-type']应该是application/x-www-form-urlencoded
res.writeHead(200,{'Content-Type':'text/html'});
res.end('<p>Content-Type: '+req.headers['content-type']+'</p>'
+'<p>Data:</p><pre>'+body+'</pre>'+
'<p>Your name is <b>'+qs.parse(body).name+'</b></p>');
})
}else{
//让代码更健壮
res.writeHead(404);
res.end('Not Found');
}
}).listen(3000);
然后在终端执行:node index.js
然后在浏览器访问localhost:3000
输入name,提交之后:
在地址栏随便输入地址,结果如下
到这里,我们已经完成了第一个HTTP Web服务器。
之后我们要学习服务端API相对的HTTP客户端API。宝宝们,一起来coding……
愿我们有能力不向生活缴械投降---Lin