1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        常見的8個前端防御性編程方案

        共 3180字,需瀏覽 7分鐘

         ·

        2021-04-12 20:27

        關(guān)于前端防御性編程

        • 我們大多數(shù)情況可能遇到過,后端的由于同時請求人數(shù)過多,或者數(shù)據(jù)量過大,又或者是因?yàn)楫惓?dǎo)致服務(wù)異常,接口請求失敗,然后前端出現(xiàn)白屏或者報錯
        • 還有一種情況,是前端自身寫的代碼存在一些缺陷,整個系統(tǒng)不夠健壯,從而會出現(xiàn)白屏,或者業(yè)務(wù)系統(tǒng)異常,用戶誤操作等
        • 那么,就出現(xiàn)了前端防御性編程

        常見的問題和防范

        1.最常見的問題:
        uncaught TypeError: Cannot read property 'c' of undefined

        出現(xiàn)這個問題最根本原因是:

        當(dāng)我們初始化一個對象obj為{}時候,obj.a這個時候是undefined.我們打印obj.a可以得到undefined,但是我們打印obj.a.c的時候,就會出現(xiàn)上面的錯誤。js對象中的未初始化屬性值是undefined,從undefined讀取屬性就會導(dǎo)致這個錯誤(同理,null也一樣)

        如何避免?

        js和ts目前都出現(xiàn)了一個可選鏈概念,例如:

        const obj = {};
        console.log(obj?.b?.c?.d)

        上面的代碼并不會報錯,原因是?.遇到是空值的時候便會返回undefined.

        2.前端接口層面的錯誤機(jī)制捕獲

        前端的接口調(diào)用,一般都比較頻繁,我們這時候可以考慮使用單例模式,將所有的axios請求都用一個函數(shù)封裝一層。統(tǒng)一可以在這個函數(shù)中catch捕獲接口調(diào)用時候的未知錯誤,偽代碼如下:

        function ajax(url,data,method='get'){
          const promise = axios[method](url,data)
          return  promise.then(res=>{
          }).catch(error){
          //統(tǒng)一處理錯誤
        }
        }

        那么只要發(fā)生接口調(diào)用的未知錯誤都會在這里被處理了

        3.錯誤邊界(Error Boundaries,前端出現(xiàn)未知錯誤時,展示預(yù)先設(shè)定的UI界面)

        以React為例

        部分 UI 的 JavaScript 錯誤不應(yīng)該導(dǎo)致整個應(yīng)用崩潰,為了解決這個問題,React 16 引入了一個新的概念 —— 錯誤邊界。

        錯誤邊界是一種 React 組件,這種組件可以捕獲并打印發(fā)生在其子組件樹任何位置的 JavaScript 錯誤,并且,它會渲染出備用 UI,而不是渲染那些崩潰了的子組件樹。錯誤邊界在渲染期間、生命周期方法和整個組件樹的構(gòu)造函數(shù)中捕獲錯誤。

        使用示例:

        class ErrorBoundary extends React.Component {
          constructor(props) {
            super(props);
            this.state = { hasError: false };
          }

          static getDerivedStateFromError(error) {
            // 更新 state 使下一次渲染能夠顯示降級后的 UI
            return { hasError: true };
          }

          componentDidCatch(error, errorInfo) {
            // 你同樣可以將錯誤日志上報給服務(wù)器
            logErrorToMyService(error, errorInfo);
          }

          render() {
            if (this.state.hasError) {
              // 你可以自定義降級后的 UI 并渲染
              return <h1>Something went wrong.</h1>;
            }

            return this.props.children; 
          }
        }

        注意

        • 錯誤邊界無法捕獲以下場景中產(chǎn)生的錯誤:

          • 事件處理(了解更多)
          • 異步代碼(例如 setTimeout 或 requestAnimationFrame 回調(diào)函數(shù))
          • 服務(wù)端渲染
          • 它自身拋出來的錯誤(并非它的子組件)
        4.前端復(fù)雜異步場景導(dǎo)致的錯誤
        • 這個問題可能遠(yuǎn)不止這么簡單,但是大道至簡,遵循單向數(shù)據(jù)流的方式去改變數(shù)據(jù),例如:
        //test.js
        export const obj = {
          a:1,
          b:2
        }

        //使用obj
        import {obj} from './test.js';
        obj.a=3;

        當(dāng)你頻繁使用這個obj對象時,你無法根據(jù)代碼去知道它的改變順序(即在某個時刻它的值是什么),而且這里面可能存在不少異步的代碼,當(dāng)我們換一種方式,就能知道它的改變順序了,也更方便我們debug

        例如:

        //test.js
        export const obj = {
          a:1,
          b:2
        }
        export function setObj (key,value)  {
          console.log(key,value)
          obj[key] = value
        }

        這樣,我們就做到了

        5.前端專注“前端”
        • 對于一些敏感數(shù)據(jù),例如登錄態(tài),鑒權(quán)相關(guān)的。前端應(yīng)該是盡量做無感知的轉(zhuǎn)發(fā)、攜帶(這樣也不會出現(xiàn)安全問題)
        6.頁面做到可降級
        • 對于一些剛上新的業(yè)務(wù),或者有存在風(fēng)險的業(yè)務(wù)模塊,或者會調(diào)取不受信任的接口,例如第三方的接口,這個時候就要做一層降級處理,例如接口調(diào)用失敗后,剔除對應(yīng)模塊的展示,讓用戶無感知的使用
        7.巧用loading和disabled
        • 用戶操作后,要及時loading和disabled確保不讓用戶進(jìn)行重復(fù),防止業(yè)務(wù)側(cè)出現(xiàn)bug
        8.慎用innerHTML
        • 容易出現(xiàn)安全漏洞,例如接口返回了一段JavaScript腳本,那么就會立即執(zhí)行。此時腳本如果是惡意的,那么就會出現(xiàn)不可預(yù)知的后果,特別是電商行業(yè),尤其要注意



        瀏覽 41
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            中文成人无字幕乱码精品区| 精品中文字幕在线播放| 日韩在线一区二区| 日韩电影中文字幕| 婷婷天堂站| 加勒比综合| 日本无码专区| 五月天av在线| 亚洲精品一二三区| 日韩中文在线视频| 一本色道久久综合狠狠躁的推荐| 亚州天堂| 午夜精品影院| 久久污| 五月天AV在线| 黄片无码免费| 天天看片天天爽| AV2014天堂网| 欧美在线免费视频| 日韩一级成人片| 色婷五月| 日韩一区二区不卡| 91鲁| 少妇高潮喷水| 可以免费看的AV| 免费十无码| 国产在线A片| 成人久久av| 草草视频在线观看| av中文字幕无码| 成人AV中文字幕| 亚洲激情在线观看| 久激情内射婷内射蜜桃欧美一级| 人人鲁人人操| 欧美日本中文字幕| 欧美A片网站| 欧美一区二区三区成人片在线| 日韩亚洲天堂| 十八禁黄网站| 亚洲AV无码精品成人| 国产三级片自拍| 日日夜夜拍| 俺来也俺也啪WWW色| 免费无人区一码二码乱码怎么办| 青青草原成人| 人妻人人操人人爽| 西西444www无码精品| 大香蕉伊人av| 国产免费成人视频| 俺来也俺也去| 日韩高清AV| 99re在线观看| 福利一区二区| 一见钟情的韩国电影| 青青五月天| 亚洲精品97| 人妻av一区二区三区| 国产成人精品亚洲男人的天堂| 国产免费高清无码| 黄色搞逼视频| 99热一区二区三区| 国产污视频在线观看| 黄色视频A| 182在线视频| 天天干在线观看| 97少妇| 日本精品中文字幕| 91视频内射| 亚洲成人免费网站| 东方AV在线观看| 日本超碰| 日韩成人网站| 在线亚洲福利| 操逼电影免费| 日本免费一二三区| 高潮无码在线观看| 国产91久久婷婷一区二区| 久久成人无码电影| 2021天天操| 日韩精品一区二区三区中文在线| 欧美精品成人免码在线| 国产小骚逼| 日本无码电影| 伊人网大香蕉| 插进去综合图| 日本不卡一区二区三区四区 | 网站啪啪| 精品无码人妻一区二区媚黑| 人人草大香蕉| 日韩欧美成人视频| 大香蕉日逼| av天天干| 色婷婷五月天| 88国产精品| 视频一区在线播放| 国产成人激情| 色综合婷婷| 肏逼网址| 国产乱妇乱子伦视频免费观看让女人| 97人人爱| 人人干人人草| 777免费观看成人电影视频| 国产又黄又大又粗| 国产精品毛片VA一区二区三区 | 久草视频福利| 亚洲日韩精品中文字幕在线| 亚洲色吧| 蜜臀AV成人| 欧洲AV片| 久久成人影音| 九九综合伊人7777777| 四lll少妇BBBB槡BBBB| 欧亚av| 国产激情AV| 国精产品秘一区二区| 在线观看无码AV| 欧美色影院| 暖暖高清无码| 中文字幕+乱码+中文字幕电视剧 | 日韩综合| 一道本视频在线| 奇米av在线| 人妻少妇精品无码| 欧美成人毛片一级A片| 日韩人妻在线视频| 日逼一级片| 专业操美女视频网站| 大地资源第三页在线观看免费播放最新 | 亚洲成人精品AV| 久久无码一区二区| 午夜电影无码| 婷婷精品| 一级操逼黄色视频| 日本特黄一级片| 一区二区三区无码精品| 黑人精品欧美一区二区蜜桃| AV中文字幕在线播放| 最近最好的2019中文| 日本黄色片| 波多野结衣无码NET,AV| 免费国产乱伦| 第一页在线观看| 人妻成人网| 国产电影一区二区三区| 久久精品大屁股| 亚洲成人情趣大香蕉| 豆花AV在线| 国内自拍2025| 波多野结衣Av在线| 女人高潮天天躁夜夜躁| 青青操天天干| 吹潮喷水高潮HD| 久草大| 一区二区三区电影高清电影免费观看 | 四虎成人电影| 再深点灬好爽灬轻点久久国产| 免费日逼| 韩国毛片基地久久| sm视频网站| 美女免费AV| 国产精品免费观看视频| 成人黄色电影在线观看| 一级黄色电影A片| 996热re视频精品视频这里| 免费在线观看黄片视频| 男女国产网站| 婷婷日韩一区二区三区| 六月丁香欧美综合| 国产又粗又大又爽| 国产精品久久久久久无码人妻 | 蜜桃91在线观看| 日韩欧美视频在线| 欧美精品秘一区二区三区蜜臀| 国产成人电影免费在线观看| 女人18片毛片60分钟翻译| 99综合久久| 久久精品一区二区三区蜜芽的特点| 国产又粗又大| 大地8免费高清视频观看大全 | 国产视频精品一区二区三区| 色综合欧美| 一级理论片| 欧美亚洲综合手机在线| 欧美怡红院视频| 老女人网站| 亚洲欧美视频在线| 亚洲黄色av| 无码孕妇| 久久久久99精品成人片三人毛片 | 免费av片| 国产免费成人视频| 小佟丽娅大战91哥| 国产视频精品一区二区三区| 操逼操123| 国产精品成人AV片| 88海外华人免费一区| aV一区二区三区| 强伦轩人妻一区二区三区四区| 最新AV| 新超碰在线观看| 麻豆一级| 岛国AV在线播放| 天堂一区二区三区| 大香蕉伊人网在线| 中文字幕av免费在线观看| www.777av| 香蕉久久国产AV一区二区| 成人免费视频一区| 精品AV无码| 亚洲精品视频在线播放| 黄色视频在线观看亚洲一区二区三区免费 | 久久77| 日本成人不卡视频| 色欲AV秘无码一区二区三区| 欧美日逼网| 一区二区三区视频在线观看| A级片毛片| 久久成人网豆花视频| 久久久亚洲熟妇熟女| 自拍偷拍网| 嫩BBB槡BBBB槡BBBB二一| 国产精品成人在线观看| 少妇无码视频| 9l视频自拍蝌蚪9l视频成人| 国产三级免费观看| www.色五月| 亚洲国产97| 亚洲黄色在线看| 激情av| 亚洲AV无码成人精品区天堂小说 | 伊人久久狼人| 懂色av懂色av粉嫩av| 成人AV影院| 婷婷五月天在线观看| 亚洲无码黄色片| www.日本色| 欧美a在线| 国产乱码一区二区三区| aaa片| 久久不卡| 亚洲色成人中文字幕在线| 免费中文字幕av| 国产黄片在线免费观看| 亚洲三级精品| 777777国产7777777| 18禁日韩| 欧美黄片在线免费看| 欧美久久久久久| 中文字幕在线资源| 狼友视频在线看| 伊人国产视频| 手机免费av| 日韩操逼av| 中文无码日本一级A片人| 熟妇无码| 成人在线日韩| 国产精品1区2区| 日韩www| 国产精品资源在线观看| 无码国产视频| 激情小视频国产在线播放| 自拍偷拍视频网| 欧美性爱免费网站| 五月天婷婷AV| 亚洲高清无码网站| 黄色小视频免费看| 在线观看中文字幕视频| 熟女天堂| 色猫AV| 国产欧美日韩一区| 亚洲第五页| 98在线++传媒麻豆的视频| 日韩理论在线| 人人干人人摸人人操| 韩国一区二区三区在线观看| 婷婷精品免费久久| 91操操| 五月天婷婷在线视频| 黄色视频在线观看国产| 奶头和荫蒂添的好舒服囗交漫画| 99久久久无码国产精品性波多 | 99久久精品一区二区成人| 国产精品婷婷久久久| 在线观看黄色视频网站| 免费人成视频观看| 国产91在线亚洲| 天天躁狠狠躁av| 婷婷操逼网| 操逼视频在线免费观看| 日韩AV资源网| 91丨PORNY丨丰满人妻网站| 亚洲AV五月天在线| 91精品啪| 国产乱妇无码毛片A片在线看下载 日韩电影免费在线观看中文字幕 欧美性爱中文字幕 | 无码不卡在线观看| 精品少妇3p| 国产内射精品| 97色色网| 亚洲无码。| 今天成全在线观看高清|