node.js用户注册功能的完善

            这篇主要实现了蹩脚的邮件发送,log日志,以及mongodb数据库更新的操作。

        草草写点,不然留到五一过后,就说不过去了。因为时间比较紧,所以功能很多都是对付,留给以后优化吧。邮件发送这一块,实现的比较简单,原计划是服务器端为用户生成一个令牌的,形如:http://127.0.0.1:3000?key=w345d&username=fuhui1,但是因为服务器端还得验证,火大,暂时放弃了,直接使用username.

       不了解思路的,这里在简单介绍一下,下面是注册页面:

技术分享

        然后判断数据库里fuhui2是不是存在,如果存在,我就不注册了,这里目前只是单纯的return,并没有实现提示功能。然后数据表就插进去了,形式上就是

技术分享


        然后发送邮件到注册者的邮箱,同时更新isValid字段为1.因为mongodb数据库没有行列的概念,可能一行数据有2列,另一行数据有5个field.形式就更新成上一图中有isValid的样子。

技术分享


        最后记录一下发送邮件的日志:

技术分享


        记录用户的session,前面的章节介绍了,然后跳转到用户的主页:

技术分享


        下面是跳转后的主页,目前只是表示有跳转这个功能,其他不管了

技术分享


        不要看这个很简单,实现起来其实也不是很容易,花了足足两个小时,搞定的。

       

        第一步,邮件模块的实现,主要是配置了QQ邮箱,按照教程配的,google吧。

exports.sendMail = function (emailAddress, title, content) {
    mail.sendMail({
        from: emailConf["user"],
        to: emailAddress,
        subject: title,
        html: content
    }, function (error, success) {
        if (!error) {
            //日志记录
            console.log('message success', success);
        } else {
            lib.log.write("maillog/sendmail.log",[err]);
            console.log('failed' + error);
        }
    });
}


        第二步,实现了更新的函数。有时候觉得mongodb就是给js写的一样,使用js操作起来特别方便,看过php操作mongodb的,但感觉就是不爽,json用数组来表示,灰常不开心,虽然自己是搞php的吧。

        mongodb灰常神奇,尤其是嵌套数组和文档,尤其是更新操作如果指定了upsert还是什么属性的,查找没找到,还管给你插入一条。还有比较有意思的是,更新不小心就会变成替换,不指定$set或者$inc什么的,他不进行更新,他进行的是替换操作。所以才有了上面的那个,第一次插入了三个字段,第二次更新的时候,又插入了一个isValid字段。

        贴一下基类的更新:

/**
     * 更新用户的操作
     * 该方法更新了option参数,之前使用默认值{safe: true}
     */
    this.modify = function (tableName, whereJson, rowInfo,option, callback) {
        connection(function (mdbConn) {
            mdbConn.collection(tableName, function (err, collection) {
                collection.update(whereJson, rowInfo, option, function (err) {
                    if (err) {
                        console.log(err);
                        callback(false);
                    }
                    else {
                        callback(true);
                    }
                });
            })
        });
    }

        第三步,日志操作。虽然手头有log4j模块的认识了解,但是还是没有用,因为没有时间实践,只能跟php一样,写个write类来手动写了,以后再完善吧

//日志记录
exports.write = function (file, infor) {
    var file_path = LOG + file;
    lib.fs.open(file_path, "a", function (err, fd) {
        if (err)
            throw err;
        console.log(typeof infor);
        return ;
//        if (typeof infor != 'array')
//            throw new Error("type failed");
        var data = format_time + " , " + infor.join(" , ") + "/n";
        lib.fs.writeSync(fd, data, function (err, writen, str) {

        });
        lib.fs.closeSync(fd);
    });
}

        第五步,给邮箱生成一个令牌。我本来计划生成一个随机数的,但是无意中发现crypto模板,本来是要该模块是进行hash密码加密的,这里我的加密方式也很简单easy,就是普通的hash加了一个盐值。   回归主题,发现 这个模块还能生成一个随机数,所以,嘻嘻,


/**
 * 获取一个随机的10位数
 */
exports.validcode =function(callback){
    crypto.randomBytes(10,function(ex,buf){
        if (ex) throw ex;
        callback(buf);
    });
}

        仔细看了一下,全是bug,路还很长啊,接下来完成登录,然后就是完善一下这几个模块,日志,加密,邮件发送等等吧。


        以后这些东西都放到虚拟机里了,在虚拟机了安装nginx,放弃127.0.0.1这个low的名称了。至于上传文件的部分,就不安装vsftpd了,值得说一下,网上的安装教程真的是太火大了,都是说些不靠谱的东西,或者四处转载,根本就不能好好的解决问题,什么添加目录权限了,添加用户组了介绍的都很不爽,也因为电脑的原因,就直接使用rz方式了。

        因为我的redis和mongodb在虚拟机上,所以,每次启动都的切换界面。



        好辛苦,欢迎大家加群抨击。



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。