• nodejs-2.http服务


     一.使用nodejs的http服务:处理 "请求或响应" 数据

    要使用 HTTP 服务器与客户端,需要 require('http')

    Node.js 中的 HTTP 接口被设计成支持协议的许多特性。 比如,大块编码的消息。 这些接口不缓冲完整的请求或响应,用户能够以流的形式处理数据。//引入 http 模块

    //引入内置模块 http 
    var http = require('http'); //创建服务 var server = http.createServer(function(req, res){
        //req 是封装好的请求对象
        //res 是封装好的相应对象
        res.end('first http server ok'); 
    });

    //监听端口

    server.listen(8080);

     

     

    二.http服务:请求报文和响应报文

    1.http协议(请求和响应)包括三部分:请求行、请求头、请求体

    2.请求报文格式: 客户端向服务器发送的内容

    (1) 请求行  GET  /?a=1  HTTP/1.1
    (2) 请求头 

        Host: localhost:8080

        User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 
        ... ...

    (3) 请求体

    注:get方式会把请求参数拼接在请求行中;

           post方式则把请求参数放在请求体中

    3.响应报文 :服务器给客户端浏览器返回的结果

    (1) 响应行    HTTP/1.1 200 OK

        注:响应状态码 (状态码很灵活,可以自定义)

          2xx 成功

          3xx 跳转的

          4xx 问题     ----->  公益 404 https://yibo.iyiyun.com/
          5xx 内部错误

    //设置响应状态码  
    // res.statusCode = 200;
     res.statusCode = 302;

     

    (2)响应头:作用是告知客户端浏览器内容的格式和字符集

    res.setHeader('content-type','text/html;charset=utf-8');
    //响应头 `content-type` 作用是告知客户端浏览器内容的格式和字符集
    //格式:
    //text/html
    //text/css
    //text/plain

    (3)响应体

    ☆浏览器页面中通过右键查看源代码看到的内容就是 *响应体*

    // 响应体 :
    //响应数据可以放在res.write(),也可以放在res.end(),但一定要有res.end()否则数据响应完后后还在处理中。
    
    res.write('我是响应体哦!!!');
        
    res.end();
    //res.end 方法中必须传递字符串参数, 数字也不行

     

                    

     

    三、http服务:请求方法和响应方法

    1.请求方法

    (1) 请求 req

    (2) 请求方法 req.method

    (3) 请求路径 req.url

    (4) 请求版本 req.httpVersion

    (5) 请求头 req.headers

    (6) 请求参数    require('url').parse(req.url, true).query

    (7) 路由参数别名占位:id   req.params.id

    (8) 正则匹配的参数    使用()形成子组件,再用 req.params[0] 获取

    var express = require('express');
    var app = express();
    var urlTool = require('url');
    
    app.use(express.static('public'));//  static  静态的     静态资源  html  css  js   image
    
    //路由
    //请求
    app.get('/request', function(req,res){
        //请求方式
        var method = req.method;
        var url = req.url;
        var version = req.httpVersion;
        var headers = req.headers;
        //获取url请求参数
        var params = urlTool.parse(req.url, true).query;
    
        console.log(method);
        console.log(url);
        console.log(version);
        console.log(headers);
        console.log(params);
    
        res.end('ok');
    });

    //路由参数:id
    app.get('/:id.html', function(req,res){
      console.log(req.params.id);
      res.end('over');
    });

    //正则匹配的参数 /user/1.html
    app.get(/^/user/(d+).(html)$/, function(req,res){
      //获取参数
      // console.log(req.params);
      var id = req.params[0];
      console.log(id);
      res.end('user center page');
    });

    //监听端口
    app.listen(80);

    2.响应方法

    (1) 响应 res
    (2) 状态码  res.statusCode
    (3) 响应头信息   res.setHeader('content-type','text/html;charset=utf-8');
    (4) 响应体   res.send('iloveyou')
    (5) 响应数据JSON 格式   res.json({id:100,name:'xiaohigh'})
    (6) 跳转重定向   res.redirect('/login')   res.redirect('http://www.baidu.com')
    (7) 下载   res.download('./test.js')

    (8) res.end();  //如果res.end()要响应数据,格式必须是字符串

    var express = require('express');
    var app = express();
    
    //路由
    //响应
    app.get('/response', function(req,res){
        //设置响应状态码
        res.statusCode = 200;
        //设置响应头信息
        // res.setHeader('content-type','text/html;charset=utf-8');
        //响应体  send 发送
        // res.send('<span style="color:#aed">I love you very much  and you???</span>');
    
        //json 格式的数据   是存储在响应体中的.
        // HTTP/1.1  200 ok
        // Content-type: xxxxx
        // {"name":"xiaohigh"}
        // res.json({'name':'html5','price':20000});
    
        //重定向
        // res.redirect('http://www.baidu.com/s?wd=龙卷风');
    
        //文件下载
        res.download('./test.js');
    });
    
    
    //监听端口
    app.listen(8080);

    ☆ 跳转重定向   res.redirect('/login')  原理图:

  • 相关阅读:
    cad.net DeepCloneObjects WasErased
    cad.net 更改高版本填充交互方式为低版本样子
    日志篇 VS Gitee码云
    测试篇 c#遍历所有安装程序 获取所有已经安装的程序
    cad.net 设置Acad2008默认启动 win10设置默认cad2008默认启动 20190923修改
    cad.net cad启动慢? cad2008启动慢? cad启动延迟? cad卡住? cad98%卡? 默认打印机!!
    测试篇 c#多线程实现ping 制作一个备份器
    cad.net 利用win32api实现不重复打开dwg路径的文件夹(资源管理器)
    cad.net 利用win32api实现一个命令开关参照面板 20190910修改浩辰部分问题,完美.
    cad.net 在cad2008引用了错误的com接口的dll导致出现了
  • 原文地址:https://www.cnblogs.com/xzsz/p/9066305.html
Copyright © 2020-2023  润新知