h5Web前端之路

node入门http

2017-10-17  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读