- 前言
- 第一章 Hello Backbone.js
- 第二章 Backbone.js 中的 Model 实践
- 第三章 Backbonejs 中的 Collections 实践
- 第四章 Backbonejs 中的 Router 实践
- 第五章 Backbonejs 中的 View 实践
- 第六章 实战演练:todos 分析(一)
- 第七章 实战演练:todos 分析(二)View 的应用
- 第八章 实战演练:todos 分析(三)总结
- 第九章 后端环境搭建:web.py 的使用
- 第十章 实战演练:扩展 todos 到 Server 端(backbonejs+webpy)
- 第十一章 前后端实战演练:Web聊天室 - 功能分析
- 第十二章 前后端实战演练:Web聊天室 - 详细设计
- 第十三章 前后端实战演练:Web聊天室 - 服务器端开发
- 第十四章 前后端实战演练:Web聊天室 - 前端开发
- 第十五章 引入 require.js
- 第十六章 补充异常处理
- 第十七章 定制 Backbone.js
- 第十八章 再次总结的说
- Backbonejs 相关资源
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第十六章 补充异常处理
忘了之前定这么个题目是要表达什么内容,就简单介绍下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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论