node入门http

作者: 圆心角 | 来源:发表于2017-10-17 14:32 被阅读3次

    自己的了解领域是node有http 和 app 两个模块
    首先 http端
    http模块:负责web服务器相关任务的模块
    模块:把各种功能划分在模块中,通过模块编写相关代码

    1、引入http模块
    var http = require("http");
    然后创建服务

    //node.js
    var server = http.createServer(function(req, res){
        res.end('hello world');
    }
    server.listen('9090')
    直接在git上面输入node node1.js(前提是在当前文件打开git) 在谷歌中输入localhost:9090 就能看到效果
    

    req和res参数

    req参数: 请求对象,从客户端发到服务器中的请求信息存放在这个对象中
    res参数: 响应对象,需要返回给客户端的信息要放在这个对象中

    我们可以通过req.url和req.method分别拿到请求的路径和请求参数

        请求路径
        // console.log(req.url);  通常是端口号后的 例如:index.html
        //请求方式
        // console.log(req.method) GET 或者POST
    

    下面写一个小小的客户端请求服务端页面的过程
    首先我先把能用到的木块进行require

    //demo.js
    
    //1、引入http模块
    var http = require("http");
    //2、引入url模块
    var url = require("url");
    //3、引入常用工具util模块
    var util = require("util");
    //4、引入querystring模块
    var querystring = require("querystring");
    

    然后写一下返回给客户端的html页面

    var backHTML = 
      '<html><head><meta charset="utf-8"><title>小案例</title></head>' +
      '<body>' +
      '<form method="post">' +
      '账号: <input name="username"><br>' +
      '密码: <input name="passwd"><br>' +
      '<input type="submit" value="提交">' +
      '</form>' +
      '</body></html>';
    

    接着创建服务

    var server = http.createServer(function(req,res) {
    
    })
    server.listen('9091)
    

    下面在服务里写内容
    默认情况下客户端向服务端发送的请求是GET,如果服务端标明要求客户端请求的时候必须是post请求 那客户端只能通过post方式进行请求,所以我们要判断客户端的请求方式
    里面有几个点先说一下

    //返回请求文件的类型  每一个返回的文件都应该有他自己的类型,所以这个在每一个成功返回的条件下都应该存在
     res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
    //返回数据  返回的写在write里面
    res.write()
    //获取客户端传递的数据   parse
    http://localhost:9091/index.html?username=shang&passwd=666
    var info = url.parse(req.url, true);
    info是一个对象,里面存放很多键值对,端口号后面的参数是放在一个key为query的里面,如下图info 就是图中的Url
    var parmars = info.query; 就能拿到参数了
    //将对象转换为字符串     inspect:将对象转成字符串
    var infoStr = util.inspect(info);
    
    query
    var server = http.createServer(function(req,res) {
      if(req.method == "GET") {
        //先判断请求的是哪个文件 / 表示所有的文件都可以  通常为了方便我们都用/
         if(req.url == '/') {
          res.writeHead(200, {'Content-Type':'text/html;charset = utf-8'})
          res.write(postHtml)
          res.end(); 
          //我就很不理解,如果这里成功了为什么还会走下面的else ,但这样是对的,也许另有深意
         } else { 
          var info = url.parse(req.url, true);
          var infoStr = util.inspect(info);
          res.writeHead(200, {'Content-Type':'text/plain;charset = utf-8'})
          var parmars = info.query;
          res.write('名称' + parmars.username);
          res.write('\n');
          res.write('编号' + parmars.id);
          res.write('\n');
          res.end(); 
         }
      } else { 
          //上面的是GET请求  接下来是post请求
         /* POST 请求的内容全部的都在请求体中,
                http.ServerRequest 并没有一个属性内容为请求体,
                原因是等待请求体传输可能是一件耗时的工作。
                比如上传文件,而很多时候我们可能并不需要理会请求体的内容,
                恶意的POST请求会大大消耗服务器的资源,所有node.js 默认是不会解析请求体的,
                当你需要的时候,需要手动来做。*/
          // 定义了一个body变量,用于暂存请求体的信息
          var body = "";
          // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到body变量中
          req.on("data", function(chun){
              body += chun;
          });
    
          // 通过req的end事件监听函数,获取客户端传递的信息
            req.on("end", function(){
                // 解析参数   querystring.parse(body)
                body = querystring.parse(body);
                res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
    
                res.write("账号:"+body.username);
                res.write("\n");
                res.write("密码:"+body.passwd);
                res.write("\n");
                res.end();
          })
       }
    })
    

    然后服务端运行node demo.js
    客户端运行localhost:9091

    相关文章

      网友评论

        本文标题:node入门http

        本文链接:https://www.haomeiwen.com/subject/wqzruxtx.html