阶段总结node模块化 Ajax。promise

node模块化  

            + module.exports  每个js文件里面都有一个module对象 里面有exports成员

            + require  导入  导入这个js文件的时候  会执行这个js文件里面的代码  

内置模块  

              + fs

                + fs.readFile(路径,'utf-8',回调)  异步读取  

                + fs.readFileSync   同步读取文件

                + fs.writeFile(路径,写入的内容,回调)  异步写入  

                + fs.writeFileSync   同步写入  

                + fs.appendFile(路径,写入的内容,回调)   异步依次写入

              + path  

                + path.join()   组装相对路径  

                + path.resolve()  组装绝对路径

                + path.parse()   解析路径  

              + url  

                + url.parse(url,是否深度解析(默认false))  解析url地址  query    

              + http  

 + 第三方的模块    

        npm  包管理器    

       

         + npm init -y  

            + 会生成一个package.json  

         + npm  i  包名@版本号 --save   -g

           --save  就是保存在生产环境

           --save-dev  保存在开发环境      

           -g  全局安装

            + node_modules  你下载的所有包都在这个里面  

         + npm un 包名  

         +  只要有package.json   后面我就可以直接  npm i  

         nrm  

           nrm test    

           nrm use taobao  

http  

          + 建立连接  

                  + 以请求报文的形式发送请求到服务端  

                  + 以响应报文的形式返回后端的响应

                  + 断开连接  

             + 三次握手  

              + 第一次握手   客服端发送连接请求  

                 服务端接收到消息   服务端就知道 客服端能正常发送消息  自己也能正常接收消息

               + 第二次握手  服务端给客服端发送消息  

                 客户端 自己能正常发送 能够正常接收    知道服务端能正常接收 正常发送    

               + 第三次握手  

                 为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。         

              四次挥手 

                     + 客户端 发送消息  我要断开连接了  

                     + 服务端接收消息 知道你要断开了 发送一个消息给客户端 说 我知道了  我准备一下  

                     + 客户端接收到消息以后 再发送一次消息  我真的断开了 你再发送消息的时候  我也不会回应了

                     + 服务端接收到消息以后 自己也断开 再有消息 也不会回应了  

http和https的区别:

  • http的URL是以http://开头,而https的URL是以https://开头。
  • http是明文传输,安全性低,而https可以进行加密传输,身份认证。
  • http的标准端口是80,而https的标准端口是443。

 + cookie  

          + 在浏览器存储关键信息的内存空间  

            + 前后端都可以操作

            + 必须在服务端环境才能设置或者获取

            + 受域限制  

            + 受路径限制  

            + 时效性 没有设置的话  就是默认会话级  可以设置过期时间

            + 大小 4kb 50条  

            + 一次只能设置一条  

            document.cookie = 'key=value;expires=时间对象;path=/'

         + sessionStorage  

            + 只能前端操作  

            + 时效性  会话级  

            +  大小 5M

 方法: + setItem getItem removeItem  clear  

          + localStorage  

            + 只能前端操作  

            + 时效性  除非手动删除  会一直存在

            +  大小 5M

方法: + setItem getItem removeItem  clear  

         1.find  返回第一项满足条件的,  如果没有满足的 返回undefined  

        2.findIndex  返回第一项满足条件的索引  

        3.同步和异步  

           同步   + 前面报错 后面不执行  

           异步  + 定时器 延时器  

Ajax封装:

 /*
                ajax_post请求 
        
                接收参数的时候 用一个对象接收 option
                @parmas {String} url 请求的地址  
                @parmas {Object} query 请求的参数   
                @parmas {Function} success  表示成功的时候的回调函数
                  @parmas {Function} error  表示失败的时候的回调函数
             */


        function  ajaxPost(option){
            const {url,query,success,error} = option
            // 判断有没有url
            if(!url){
                return  alert('url必传')
            }
            //创建实例化对象  
            let  xhr = new XMLHttpRequest()  
            
            // 设置请求地址和请求类型  
            xhr.open('post',url)

            // 设置请求头  
            xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')

            if(query){
                var  str = ''

                for(let key in query){
                    str +=`${key}=${query[key]}&`
                }
                 str = str.slice(0,-1)  
            }
            // 发送  
            query?xhr.send(str):xhr.send(null)

            xhr.onreadystatechange = ()=>{
                if(xhr.readyState == 4){
                    if(xhr.status == 200){
                        success && success(xhr.response) 
                    }else{
                        error && error(xhr.response)
                    }
                }
            }
        }         
            

        let  obj  = {
            url:'http://localhost:8888/test/fourth',
            query:{
                name:"zhangsan",
                age:25
            },
            success:(data)=>{
                console.log(data)
            }
        }

        ajaxPost(obj)
function ajaxGet(option) {
            if (!option.url) {
                return alert('url必传')
            }

            let xhr = new XMLHttpRequest()
            if (option.query) {
                var str = '?'
                for (let key in option.query) {
                    str += `${key}=${option.query[key]}&`
                }
                str = str.slice(0, -1)
            }
            option.query ? xhr.open('get', option.url + str) : xhr.open('get', option.url)

            // xhr.setRequestHeader('token','wangaho')
            // xhr.setRequestHeader('info','123456')

            xhr.send()

            xhr.onreadystatechange = () => {
                if (xhr.readyState == 4) {
                    if (xhr.status == 200) {
                        option.success && option.success(xhr.response)
                    } else {
                        option.error && option.error(xhr.response)
                    }
                }
            }
        }

        promise  

         + 主要用来解决回调地狱

         + 把promise 当做一个状态机 初始状态 pending  里面有两个函数 resolve 和reject  

           + 通过resolve改变状态 改变以后是成功的  通过reject 改变以后的状态失败的  

           + 状态一经改变  不能恢复  

         +   var  p  =  new Promise((resolve,reject)=>{})  

         +   then  成功时候的处理函数  

         +   catch 失败时候的处理函数  

         +   finally 不管成功还是失败都会执行

        + async await  

         + 依靠一个函数

         + 必传和promise对象一起用  

         + 只能获取成功的时候 的数据

         + 不管成功还是失败  都用resolve

  /* 
        async/await  ES7 
          解决回调地狱的终极方案
        + 主要需要和 promise对象一起使用   
        + 在一个函数里面使用  
        + 只能拿到成功的时候 结果   
        */

        async function fn() {
            var dataA = await ajaxGet({ url: "https://mock.apifox.cn/m2/1088284-0-default/32407331" })
            console.log(dataA)
            var dataB = await ajaxGet({ url: "https://mock.apifox.cn/m2/1088284-0-default/32407331", query: { num: dataA } })
            console.log(dataB)
            var dataC = await ajaxGet({ url: "https://mock.apifox.cn/m2/1088284-0-default/32407331", query: { num: dataB } })
            console.log(dataC)
        }
        fn()


        //  解决   async/await  不能捕获错误信息的方案   

        //  方案一:  本来错误解决的reject  也用resolve 去解决

        // 方案二: 可以使用try catch语法捕获错误信息

             + try catch  

                +  try{

                }catch(err){

                }finally{

                }  

         + 语法: async  function fn(){

              var  res = await promise对象  

         }  

         + promise 其他的方法  

           all : 所有的请求都返回以后 统一把结果放在一个数组里面 返回  

           all([请求1,请求2...]).then((res)=>{}).catch()

          race: 多个请求发送的时候  谁先返回 就返回谁的结果  

          race([请求1,请求2...]).then((res)=>{}).catch()

        */

        // new Promise((resolve, reject) => {

        //     resolve()

        //     console.log(123)

        // }).then((res)=>{

        //     console.log(res)

        // })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值