思考在编码之前解决问题

这篇主要实现了蹩脚的邮件发送,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加了一个盐值。 回归主题,发现 这个模块还能生成一个随机数,所以,嘻嘻,

人之所以能,是相信能。

思考在编码之前解决问题

相关文章:

你感兴趣的文章:

标签云: