node.js中實現使用者註冊的功能
阿新 • • 發佈:2019-01-08
終於決定要實現註冊的功能了,開啟虛擬機發現,mongodb不能啟動,我真是無語到了極點,谷歌了好久,原來是因為老是直接關閉虛擬機器造成的,沒辦法,刪除.lock檔案 重啟就可以了,別人還要 --repair一下,我直接略過,粗學者,就懂那麼多啊,不過我也漲記性了,以後shutdown -h now一下。
設計一個簡單的表結果,因為mongodb也比較特殊,我仍舊是一個粗學者,每次插入的時候,它會自動建立表,我們只需要常見一個db就可以了哦。然後下面這是表結構:
/* user table*/ username password isValid email createTime validCode 使用者名稱 密碼 是否驗證 郵箱 註冊時間 郵箱驗證碼
簡單點,複雜的我也整不來。
今天先實現部分的註冊功能,請注意,是部分的,簡單到只是往mongodb中插一條資料,當然如果資料已經存在,就不插入了。
首先寫了一個蹩腳的mongodb類,然後寫了一個usermongodb的資料庫操作類,繼承mongodb類,最後寫了一個register.js來處理請求,最最後寫了一個jade模板頁,
html head meta(charset='utf-8') link(rel="stylesheet",href="style.css") title 註冊 body form(action='/register/index', method='POST') p span 使用者名稱 input(type='text',name='username',value='') p span 密碼 input(type='password',name='password') p span 郵箱 input(type='text',name='email') input(type='submit',value='註冊')
雖然簡單,但是足足除錯了一個小時,誰讓自己是一個粗學者了!
跪的地方比較多,首先就是那個_self ,大家看到了沒有,之前寫的this,我卡,系統找不到方法,還提示util錯誤,我那知道util錯誤是啥啊。究其原因,主要是回撥函式中使用this,this物件指代變換了。
this.addUser = function (userData, callback) { //判斷使用者名稱是否存在 if (!userData.username) { return; } //使用者名稱不能重複 var usernameJson = {"username": userData.username}; this.findOneByID(this.tableName, usernameJson, function (ret) { if (!ret) { //如果使用者名稱不存在,則新增使用者 _self.insert(_self.tableName, userData, function (ret2) { if (ret2) { callback(true); } else { callback(false); } }); } else { callback(false); } }); }
然後就是調查遊標這個物件,我卡,讀英文說,單向遍歷,轉換陣列,回撥函式一個是err,一個是陣列,要是遊標移動了什麼的,陣列就不完成了什麼的,暈了!最後就有了rewind這個東西。但是,這都不是重點,不是重點,重點是docs返回個是一個空,請注意,console.log列印是一個空,不是一個[],看英文文件理解錯了,【he first parameter will contain the Error object if an error occured, or null otherwise.】,我還以為返回出錯了,然後發現.length一下居然返回一個0,坑!
this.findOneByID = function (tableName, whereJson, callback) {
connection(function (mdbConn) {
mdbConn.collection(tableName, function (err, collection) {
if(err){
return;
}
var cursor = collection.find(whereJson);
cursor.toArray(function (err, docs) {
if (err) {
callback(false);
}
else {
var row = docs.shift(); //undefined
callback(row);
}
});
cursor.rewind();
})
});
}
無語的是,插入的時候插入幾個欄位,資料庫裡就幾個欄位,我之前設計的沒有插進去,還是功力不夠深厚啊!!!
好吧,估計也沒有人看,睡吧,寫給自己以後豐富的。後續註冊要新增郵箱驗證,登入,日誌什麼的,下個星期在說吧。