返回介绍

第十六章 补充异常处理

发布于 2020-12-21 03:56:19 字数 5208 浏览 986 评论 0 收藏 0

忘了之前定这么个题目是要表达什么内容,就简单介绍下wechat项目中的错误处理。

16.1 error的使用

说这个错误处理其实很简单,有过JavaScript经验的同学应该看到Backbonejs中定义的回调函数选项中的error参数就知道怎么写了。

需要处理错误的场景都是在客户端和服务器端通信时,在wechat中主要是save和fetch时。有一段代码展示下就是:

registe: function(evt){
    var reg_username_input = $('#reg_username');
    var reg_pwd_input = $('#reg_pwd');
    var reg_pwd_repeat_input = $('#reg_pwd_repeat');
    var u = new User({
        username: reg_username_input.val(),
        password: reg_pwd_input.val(),
        password_repeat: reg_pwd_repeat_input.val(),
    });
    u.save(null, {
        success: function(model, resp, options){
            g_user = resp;
            // 跳转到index
            appRouter.navigate('index', {trigger: true});
        },
        error: function(model, resp, options) {
            alert(resp.responseText);
        }
    });
},

这是用户注册时的代码,在save的参数的第二个参数部分添加了error的处理,具体功能就是alert出服务器端传回来的response的内容。

那么这么错误是什么时候触发的呢?正常情况下是触发success对应的function,那么什么是正常呢?正常和错误在Backbone.js中是通过返回的HTTP状态码来区分的(应该说是jQuery或者zepto这样下一层处理ajax的库),jQuery中错误判断的代码是这样的: if ( status >= 200 && status < 300 || status === 304 ) {

因此,对应着服务端的处理就是返回非20x 和304的错误就行,一般客户端的错误都会返回400(40x系列)这样的错误,服务器端的错误一般都是500以上的错误。

对应上面的的错误,服务器端在使用web.py框架要这么处理:

def POST(self):
    data = web.data()
    data = json.loads(data)
    username = data.get("username")
    password = data.get("password")
    password_repeat = data.get("password_repeat")

    if password != password_repeat:
        # 会返回HTTP400的错误,内容是message的内容
        raise web.BadRequest(message='两次密码输入不一致')

    user_data = {
        "username": username,
        "password": sha1(password),
        "registed_time": datetime.now(),
    }

    try:
        user_id = User.create(**user_data)
    except sqlite3.IntegrityError:
        raise web.BadRequest(message="用户名已存在!")

    user = User.get_by_id(user_id)
    session.login = True
    session.user = user

    result = {
        'id': user_id,
        'username': username,
    }
    return json.dumps(result)

这样就ok了。看起来都是基本的东西。

参考: HTTP状态码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文