HTTP请求与响应处理

本文介绍了HTTP请求中的GET和POST参数,阐述了如何在Node.js中处理POST请求数据。同时,讨论了静态资源与动态资源的概念,并详细解释了路由的工作原理。此外,还深入探讨了Node.js中的异步编程,包括同步API与异步API的区别、回调函数、Promise以及异步函数的使用,旨在帮助读者更好地理解和掌握Node.js的异步处理机制。
摘要由CSDN通过智能技术生成

1.1请求参数

客户端向服务器端发送请求时,有时需要携带一些客户信息,客户信息需要通过请求参数的形式传递到服务器端,比如登陆操作。

1.2GET请求参数

  • 参数被放置在浏览器地址栏中,例如:http://localhost:3000/?name=zhangsan&age=20

1.3POST请求参数

  • 参数被放置在请求体中进行传输(也就是请求报文)
  • 获取POST参数需要使用data事件和end事件
  • 使用querystring系统模块将参数转换为对象格式
//导入系统模块querystring用于将HTTP参数转化为对象格式
const querystring=require('querystring');
app.on('request',(req,res)=>{
    let postData='';
    //监听参数传输事件
    req.on('data',(chunk)=>postData+=chunk;);
    //监听参数传输完毕事件
    req.on('end',()=>{
        console.log(querystring.parse(postData));
    })
})

1.4静态资源

服务器端不需要处理,可以直接响应给客户端的资源就是静态资源,例如CSS、JavaScript、image文件。

1.5动态资源

相同的请求地址不同的响应资源,这种资源就是动态资源。

http://www.itcast.cn/article?id=1

http://www.itcast.cn/article?id=2

1.6路由

http://localhost:3000/index

http://localhost:3000/login

路由是指客户端请求地址与服务器端程序代码的对应关系。简单的说,就是请求什么响应什么。

//当客户端发来请求的时候
app.on('request',(req,res)=>{
    //获取请求方式
    const pathname=url.parse(req.url).pathname;
    //获取客户端的请求路径
    let{pathname}=url.parse(req.url);
    
    res.writeHead(200,{
        'content-type':'text/html;charset=utf8'
    })
    if(method=='get'){
       if(pathname=='/'||pathname=='/index'){
            res.end('欢迎来到首页');
       }else if(pathname=='/list'){
            res.end('欢迎来到列表页');
       }else{
            res.end('抱歉,您访问的页面出游了');
       }
    }else if(method=='post'){
        
    }
})

1.7node.js异步编程

  1. 同步API,异步API

    同步API:只有当前API执行完成后,才能继续执行下一个API

    console.log('before');
    console.log('after');
    

    异步API:当前API的执行不会阻塞后续代码的执行

    console.log('before');
    setTimeout{()=>{
            console.log('last');
        },2000};
    console.log('after');
    //输出结果的顺序before after last
    
    //路径拼接
    const public path.join(__dirname,'public');
    //请求地址解析
    const urlObj=url.parse(req.url);
    //读取文件
    fs.readFile('./demo.txt','utf8',(err,result)=>{
        console.log(result);
    })
    
  2. 同步API,异步API的区别(获取返回值)

    同步API可以从返回值中拿到API执行的结果,但异步API是不可以的

    //同步
    function sum(n1,n2){
        return n1+n2;
    }
    const result=sum(10,20);
    console.log(result);
    //输出结果为10,20
    
    //异步
    function getMsg(){
        setTimeout(function(){
            return{msg:'Hello Node.js'}
        },2000);
    }
    const msg=getMsg();
    //输出结果为undefined要想拿到结果要使用回调函数
    
  3. 回调函数

    自己定义函数让别人去调用

    //getData函数定义
    function getData(callback){}
    //getData函数调用
    getData(()=>{});//将一个箭头函数做为另一个函数的参数被调用
    
  4. Promise

    Promise出现的目的是解决Node.js异步编程中回调地狱的问题

    let promise=new Promise((resolve,reject)=>{
        setTimeout(()=>{
            if(true){
                resolve({name:'张三'})
            }else{
                reject('失败了')
            }
        },2000);
    });
    promise.then(result=>console.log(result);//{name:'张三'})
           .catch(error=>console.log(error);//失败了)     
    
  5. 异步函数

    异步函数是异步编程语法的终极解决方案。它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,使代码变得清晰明了。

    const fn=async()=>{};
    async function fn(){};
    
    //1.在普通函数定义的前面加上async关键字 普通函数就变成了异步函数
    //2.异步函数默认的返回值是promise对象
    //3.在异步函数内部使用throw关键字进行错误的抛出
    
    //await关键字
    //1.它只能出现在异步函数中
    //2.await promise 它可以暂停异步函数的执行 等待promise对象返回结果后再向下执行
    async function fn(){
        throw '发生了一些错误';
        return 123;
    }
    //console.log(fn())
    fn().then(function(data){
        console.log(data);
    }).catch(function(err){
        console.log(err);
    })
    
  6. 大师傅但是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值