node.js中实现用户注册的功能


    终于决定要实现注册的功能了,打开虚拟机发现,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();
            })
        });
    }

    无语的是,插入的时候插入几个字段,数据库里就几个字段,我之前设计的没有插进去,还是功力不够深厚啊!!!

      

        好吧,估计也没有人看,睡吧,写给自己以后丰富的。后续注册要添加邮箱验证,登录,日志什么的,下个星期在说吧。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值