前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >降级那些事情

降级那些事情

作者头像
IMWeb前端团队
发布2017-12-28 18:31:16
9630
发布2017-12-28 18:31:16
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队

降级那些事情

页面上线的时候,偶尔会有些特殊或者比较极端的情况,导致页面报错。

小的错误可能只是console控制台上的一个error提示,大的错误可能会导致页面无法正常使用,更严重的可能是页面都没法正常展示。

这边聊聊如何可以有效的避免一些错误,或者如何在错误的时候做兼容,让代码或者页面更有健壮性。

变量级别

通常一个场景是,函数接受一个参数,或者从接口中返回数据,要对这些数据做处理。使用接口的人或者说后台是不会告诉你参数到底会不会有异常(难道告诉你了你就可以放心的不管了?)。

代码语言:javascript
复制
function a(opts) {
    var v = opts.v;
}

这样如果入参是undefined或者null的话,那么这句就直接报错。通常做法是

代码语言:javascript
复制
function a(opts) {
    opts = opts || {};
    var v = opts.v;
}

这里有一个做法是使用es6的默认值,但如果传的参数是null,这边会怎样? function a(opts={}) { var v = opts.v; }

代码块级别

还有一种异常是发生在异步请求或者代码运行过程中的异常,异常一般是在error回调或者trycatch里处理,也是比较常见的方式了

代码语言:javascript
复制
var a;
try {   
    a = JSON.parse('')
} catch(e) {    
    a = {}
}

以上两种处理方式比较常见,一般异步页面里用的比较多,点虽然小,但比较有用。

接下来说是页面级别的降级或者说错误兼容。

页面降级

对于外部请求不存在的资源,通常我们是返回一个定制的404页面。而对于访问了服务器直出的页面,直出页面不可用时,简单粗暴的404就不那么适用了。

这个时候,我们需要的是能够提供和重要页面体验一样的异步页面给到用户,让用户感知不到这里的问题。

这里就提出了一个新的要求,降级的异步页面哪里来。

  • 手动写一个
  • 同构

ps:这里主要讲降级,所以这块具体实现不再扩展。

降级可以由直出服务来处理,比如在error的时候重定向(重定向的url和当前url是不一样的,一样的话就跪了),或者在error的时候返回一个标志位,业务代码依据标志位执行异步请求以及数据渲染的逻辑。

代码语言:javascript
复制
        .catch(function(err) { // 错误处理
            logger.error(err, err.errMsg);
            Index.oldIndex(param, request) // 暂时降级为老首页
                .then(function(result) {
                    return reply(result);
                }, function(err) {
                    return Tool.errorRedirect(reply, err.errCode);
                });
        });

直出服务处理会有个问题,直出服务挂了该怎么办。

这个时候该接入层(nginx)上场了,在当前location中配置降级策略。

代码语言:javascript
复制
error_page 404 500 501 502 503 504 = /fallback.html;

目前我们采用的做法在上面,但其实也面临一个问题是,nginx规则经常变,如果nginx挂了,咋办?

这个时候可以做的是,利用多层nginx代理,上层代理对重要页面做降级处理,下层代理就是常规的业务nginx配置。

cgi降级

cgi是需要部署在不同的地区不同的机房中,但万一真的cgi也挂了,页面降级再多也是徒劳。所以摆在我们面前的就是cgi挂了怎么办。 同样,我们可以在接入层(nginx)来做这件事情。

代码语言:javascript
复制
location /cgi-bin/data {    
    error_page 404 500 501 502 503 504 = /fallback.json;
}

总结

问题总是层出不穷,而我们要做的就是守好自己那一片土地。

一方面我们需要提升代码的健壮性,review代码,降低可能出问题的风险。另一方面,凡是想到万一,如果问题发生之后,我们该如何处理。

愿皮神保佑,代码无bug。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 降级那些事情
    • 变量级别
      • 代码块级别
        • 页面降级
          • cgi降级
            • 总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档