NodeJS http模块(一)——简单的请求和服务器建立

一个坑的基础是另一个坑的填满
所以跳坑会越跳越深

当你注视着坑的时候
坑连鸟都难得鸟你。

这次我决定开个新坑,node.js的http模块,因为看experss的定义说是对node.js的http模块的补充,于是去拜读了一下node.js的Http模块,并且记录一下心得

简单的http的流程

建立TCP连接-> Web浏览器向Web服务器发送请求命令->
Web浏览器发送请求头信息—>//请求
Web服务器应答->//响应
Web服务器发送应答头信息->Web服务器向浏览器发送数据->Web服务器关闭TCP连接//返回

简单来说就是以上这样的过程,而我们http模块的目的就是一点,获取req,并且处理req中获取的数据(响应),从而定义res返回些什么。

nodejs请求(request)

使用node.js对服务器进行请求http.request
通过Node.js本身的事件驱动性(通过事件监听on()),可以处理请求后返回的数据。

const options = {
  hostname: 'localhost',
  port: 8080,
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
};
//设置属性内容
const req = http.request(options, (res) => {
  console.log(`状态码: ${res.statusCode}`);
  console.log(`响应头: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
    //设置格式
  res.on('data', (chunk) => {
    console.log(`响应主体: ${chunk}`);
    //${}模版字符串语法
  });
    //监听data事件,并且将获得到的数据进行打印
  res.on('end', () => {
    console.log('响应中已无数据.');
  });
    //监听end事件,响应结束时弹出提示
});

req.on('error', (e) => {
  console.error(`请求遇到问题: ${e.message}`);
});
    //监听error事件,响应出错时弹出错误信息

通过write函数可以向监听服务器端发送数据

服务端响应

新建一个http服务器并且在8080端口上进行监听。

http.createServer(function (req, response){
   // 定义了一个post变量,用于暂存请求体的信息
    var post = '';     

    // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
    req.on('data', function(chunk){    
        post += chunk;
    });

    // 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
    req.on('end', function(){    
        post = querystring.parse(post);
        console.log(post);
    });
    //读取文件下的值并且将获得数据写入响应,并结束响应。
 fs.readFile('data.txt', function readData(err, data) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end(data);
  });
}).listen(8080, '127.0.0.1');

这样我们就很容易发现一个问题,无论是服务端还是请求端,最后获得的结果都是在on监听函数中的(外面还套了个函数),这样就使得我们难以对获得的数据进行操作,除了传callback函数参数进行间接回调处理对于请求方面我们也可以使用axios和express,使得整个http请求更加符合web方面的需求(express定义原话)。

关于请求方面的问题

1.作为后台与前台的一种数据交流方式,所有的http模块使用的前提就是要有一个后台端口,并且按照后台的要求填写headers方面的信息,如Cookie,host,Referer,Origin。然后option中的host,path,以及protocol是http还是https。

2.传输的数据(req.write)必须是流或者是字符串,所以注意参数的类型

你可能感兴趣的:(Node.js,js,前端,http)