终于决定要实现注册的功能了,打开虚拟机发现,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();
})
});
}
无语的是,插入的时候插入几个字段,数据库里就几个字段,我之前设计的没有插进去,还是功力不够深厚啊!!!
好吧,估计也没有人看,睡吧,写给自己以后丰富的。后续注册要添加邮箱验证,登录,日志什么的,下个星期在说吧。