读书笔记-《了不起的node.js》- HTTP

你若安好,便是晴天

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

原文发布于微信公众号 - 女程序员的日常(gh_df41d619fb70)

原文发表时间:2019-04-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券