http

作者: 三省吾身_9862 | 来源:发表于2022-04-02 14:06 被阅读0次

    http

    • http.METHODS 解析器支持的 HTTP 方法列表
    http.METHODS // [ 'ACL', 'BIND', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD',...]
    
    • http.STATUS_CODES 所有标准 HTTP 响应状态代码的集合
    http.STATUS_CODES // { '100': 'Continue', '101': 'Switching Protocols', '102': 'Processing', '103': 'Early Hints', '200': 'OK', ...}
    
    • http.createServer([options][, requestListener]) 创建服务

    以下两种代码等价:

    const http = require('http');
    // 创建本地服务器来从其接收数据
    const server = http.createServer((req, res) => {});
    server.listen(8000);
    
    const http = require('http');
    // 创建本地服务器来从其接收数据
    const server = http.createServer();
    // 监听请求事件
    server.on('request', (request, res) => {});
    server.listen(8000);
    
    • http.get(url[, options][, callback]) 服务器请求 其他服务器资源
    http.get('http://www.baidu.com',(res)=>{
        var html = ""
        res.on("data", data =>  html+=data )
        res.on("end",() => console.log(html))
    }).on("error",(e)=>{
        console.log(`获取数据失败: ${e.message}`)
    })
    
    • http.request(url[, options][, callback]) 服务器向 其他服务器资源 提交数据
    // 1. 创建连接
    const req = http.request({
      hostname: 'www.baidu.com',
      port: 80,
      path: '/upload',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      }
    }, (res) => {
      // 4. 收到返回数据
      console.log(`STATUS: ${res.statusCode}`);
      console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
      res.setEncoding('utf8');
      res.on('data', chunk => console.log(`BODY: ${chunk}`);
      res.on('end', () => console.log('No more data in response.'));
    });
    
    req.on('error', (e) => {
      console.error(`problem with request: ${e.message}`);
    });
    
    // 2. 将数据写入请求正文
    req.write(JSON.stringify({
      'msg': 'Hello World!'
    }));
    // 3. 发送数据
    req.end();
    

    http服务实例

    • 'close' 事件
    server.on('close', () => console.log('close')); // 服务器关闭时触发
    
    • 'connection' 事件
    server.on('connection', () => console.log('connection')); // 建立新的 TCP 流时会触发此事件
    
    • 'request' 事件
    server.on('request', (request, res) => {}); // 每次浏览器来请求服务器,都会出发
    
    • server.close([callback]) 停止服务器
    • server.listening

    <boolean> 指示服务器是否正在监听连接。

    • server.maxHeadersCount
    server.maxHeadersCount = 3000 // 限制最大传入标头计数。 如果设置为 0,则不会应用任何限制。(默认值: 2000)
    
    • server.requestTimeout
    server.requestTimeout = 60 * 1000; // 设置从客户端接收整个请求的超时值(以毫秒为单位)(默认值:0)
    

    response

    res.writeHead(200, {
      'Content-Type': 'application/json; urf-8',
      'Cache-Control': 'no-cache'
    })
    
    res.setHeader('Content-Type', 'application/json; urf-8')
    res.setHeader('Cache-Control', 'no-cache')
    
    • response.end([data[, encoding]][, callback])
    res.end('data'); // 给浏览器发送数据
    
    • response.getHeader(name)
    response.setHeader('Content-Type', 'text/html');
    response.getHeader('content-type') // contentType 是 'text/html'; 读取已排队但未发送到客户端的标头
    
    • response.getHeaderNames()
    response.setHeader('Foo', 'bar');
    response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
    response.getHeaderNames(); // ['foo', 'set-cookie']
    
    • response.getHeaders()
    response.getHeaders(); // { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] }
    
    • response.hasHeader(name)

    返回 Boolean,相应头是否有name字段

    • response.removeHeader(name)

    相应头,移除name字段

    • response.statusCode
    response.statusCode = 404; // 设置响应 状态码
    
    • response.statusMessage
    response.statusMessage = 'Not found'; // 设置响应 状态信息
    
    • response.writeHead(statusCode[, statusMessage][, headers])
    • 其他见官方文档

    request

    • request.setHeader(name, value)
    request.setHeader('Content-Type', 'application/json');  // 设置请求头
    
    • request.removeHeader(name)
    request.removeHeader('Content-Type'); // 删除请求头中的 指定 字段
    
    • request.getHeader(name)
    request.setHeader('content-type', 'text/html'); // 设置请求头
    
    • request.getRawHeaderNames()
    // 获取请求头 字段
    request.getRawHeaderNames(); // ['Foo', 'Set-Cookie'] 
    
    • request.path 请求的路径
    • request.method 请求的方法
    • request.host 请求的主机
    • request.protocol 请求的协议
    • 其他见官方文档

    创建静态资源服务

    image.png
    const http = require('http')
    const fs = require('fs')
    const path = require('path')
    
    const server = http.createServer(async(req, res) => {
      let fPath = '',
          baseUrl = path.resolve('www');
      if (req.url === '/') {
        fPath = path.join(baseUrl, 'index.html')
      } else {
        fPath = path.join(baseUrl, req.url)
      }
    
      const str = await fs.readFileSync(fPath, 'utf-8')
      res.end(str)
    })
    
    server.listen(3000, () => {
      console.log('run')
    })
    

    相关文章

      网友评论

          本文标题:http

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