忘了之前定這么個題目是要表達什么內容,就簡單介紹下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狀態碼](http://zh.wikipedia.org/zh-cn/HTTP%E7%8A%B6%E6%80%81%E7%A0%81)
- 關于
- 前言
- 第一章 Hello Backbonejs
- 第二章 Backbonejs中的Model實踐
- 第三章 Backbonejs中的Collections實踐
- 第四章 Backbonejs中的Router實踐
- 第五章 Backbonejs中的View實踐
- 第六章 實戰演練:todos分析(一)
- 第七章 實戰演練:todos分析(二)View的應用
- 第八章 實戰演練:todos分析(三)總結
- 第九章 后端環境搭建:web.py的使用
- 第十章 實戰演練:擴展todos到Server端(backbonejs+webpy)
- 第十一章 前后端實戰演練:Web聊天室-功能分析
- 第十二章 前后端實戰演練:Web聊天室-詳細設計
- 第十三章 前后端實戰演練:Web聊天室-服務器端開發
- 第十四章 前后端實戰演練:Web聊天室-前端開發
- 第十五章 引入requirejs
- 第十六章 補充異常處理
- 第十七章 定制Backbonejs
- 第十八章 再次總結的說
- Backbonejs相關資源