zoukankan      html  css  js  c++  java
  • node-http创建服务端和客户端

    http模块是nodeJS的核心模块。它可以创建客户端(发起请求)和服务端(监听请求)。

    1. 客户端client

    应用: 

    1. 爬虫

    2. 中间层-解决跨域问题

    let http = require('http');
    
    // 服务端发送的请求不存在跨域问题
    let client = http.request({
      hostname: 'localhost',
      port: 3000,
      path: '/aaa?name=lyra',
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    }, function(response) {// response可读流
      response.on('data', function(data) {
        console.log(JSON.parse(data.toString()));
      })
    });
    // client相当于可写流
    client.end("a=1&b=2");// 发送请求体
    

    2. 服务端server

    let http = require('http');
    let querystring = require('querystring');
    let url = require('url');
    
    let server = http.createServer(function(request, response) {// 监听函数;请求到来时触发
      /////////// request-->可读流
      /****1. 请求行***/
     console.log(request.method.toLowerCase());// 大写
     console.log(request.url); // 端口号后面的部分;不包含hash; eg: /aaa?a=b
      const {pathname, query} = url.parse(request.url, true); // true表示解析成对象
      // pathname: /aaa   query: {a: 'b'}
     console.log(request.httpVersion);
      /****2. 请求头***/
     //console.log(request.headers); // 所有属性名小写
      /****3. 请求体***/
      // 请求体通过监听data获取;on监听的回调是异步执行
      let arr = [];
      request.on('data', function(data) {// 只有请求体有内容,才会触发
        arr.push(data);
      });
      request.on('end', function(err) { // 不论请求体是否有内容,总会触发
        let content = Buffer.concat(arr).toString(); // username=lyra
        // 可写流的参数只能是字符串和buffer
        if (request.headers['content-type'] === 'application/x-www-form-urlencoded') {
          let result = JSON.stringify(querystring.parse(content));// =parse(content, '&', '=')
          /////////// response-->可写流(字符串或者Buffer)
          /******1. 响应行 */
          response.statusCode = 200; // 必须是有效状态码
          /******2. 响应头 */
          response.setHeader('Content-Type', 'application/json');
          /******3. 响应体 */
          // end前面还可以使用write方法
          response.end(result); //立即触发;应该放置在end回调中
        }
      })
    });
    // 监听特定的端口和IP
    /**
     * 端口号最大65535;一般使用3000+的端口,因为很多会被占用
     */
    server.listen(3000, 'localhost', () => {
      console.log('3000 started');
    })

    3. nodemon 

    node monitor。实时监控node服务的内容变化,自动重启服务。

    命令:

    nodemon 具体文件

    4. curl

    从命令行发起http请求

    // 通过命令行发起http请求
    // GET 
    curl -v http://localhost:3000  //-v查看信息
    // POST
    curl -v -X POST -d "username=lyra"//localhost:3000 //-X 指定请求方式  -d 指定传递数据
    // 带请求头
    curl -v --header "Range:bytes=0-3"  http://www.baidu.com
  • 相关阅读:
    第一个博客——python通过值传递函数参数
    JAVA并发体系-1.1-终结任务或线程
    JAVA并发体系-1.4-线程池
    JAVA并发体系-1.3-线程之间的协作
    JAVA并发体系-2-锁机制
    并发实现机制-1-综述
    JAVA并发体系-3-并发容器
    并发实现机制-2-互斥实现
    并发实现机制-3-死锁和饥饿
    JAVA持有对象
  • 原文地址:https://www.cnblogs.com/lyraLee/p/12183095.html
Copyright © 2011-2022 走看看