一个简单的blog系统(十四) 增加用户头像

1.现在我们来给博客添加用户头像。

  假定:注册的用户根据注册时的邮箱湖区gravatar头像,未注册的用户则根据留言填的邮箱获取gravatar头像,在主页和用户也的文章标题的右侧显示作者的头像,在文章页面留言人的头像显示在留言板的右侧。

  1.1 添加已经注册用户头像

我们已经引入了crypto加密模块,之前已经引用,这边就可以直接使用,首先,打开user.js,我们添加一行代码:

var crypto = require(‘crypto‘);

然后,我们将User.prototype.save()里面的代码修改为如下所示:

var md5 = crypto.createHash(‘md5‘),
        email_MD5 = md5.update(this.email.toLowerCase()).digest(‘hex‘),    //将email转化为小写在编码
        head = "http://www.gravatar.com/avatar/" + email_MD5 + "?s=48";        //增加了head头像链接键,以便后用
    //要存入数据库的文档
    var user = {    //用户信息
        name: this.name,
        password: this.password,
        email: this.email,
        head: head
    };

  接下来,打开index.js,修改成如下的代码:

router.post(‘/post‘, function(req, res) {
    var currentUser = req.session.user,
        tags = [req.body.tag1, req.body.tag2],
        post = new Post(currentUser.name, currentUser.head, req.body.title, tags, req.body.post);

    post.save(function(err) {
        if(err) {
            req.flash(‘error‘, err);
            return res.redirect(‘/‘);
        }
        req.flash(‘success‘, ‘发布成功!‘);
        res.redirect(‘/‘);    //发表成功即跳转到首页
    });
});

  然后,我们打开post.js,作出以下的修改:

function Post(name, head, title, tags, post) {
    this.name = name;
    this.head = head;
    this.title = title;
    this.tags = tags;
    this.post = post;
}
var post = {
        name: this.name,
        head: this.head,
        time: time,
        title: this.title,
        post: this.post,
        tags: this.tags,
        comments: [],
        pv: 0    //传入pv值,并且将其赋值为0
    };

最后,我们打开user.ejs和index.ejs,在h4标签后面添加如下代码:

<a href="/u/<%= post.name %>"><img src="<%= post.head %>"  style="display:inline-block; width:24px; height:24px"/></a>

  2. 添加未注册用户的头像:

打开index.js,修改如下所示的代码:

//留言相应页面
router.post(‘/u/:name/:day/:title‘, function (req, res) {
      var date = new Date(),
          time = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " +
                 date.getHours() + ":" + (date.getMinutes() < 10 ? ‘0‘ + date.getMinutes() : date.getMinutes());
      var md5 = crypto.createHash(‘md5‘),
        email_MD5 = md5.update(req.body.email.toLowerCase()).digest(‘hex‘),    //将email转化为小写在编码
        head = "http://www.gravatar.com/avatar/" + email_MD5 + "?s=48";        //增加了head头像链接键,以便后用
      var comment = {
          name: req.body.name,
          head: head,
          email: req.body.email,
          website: req.body.website,
          time: time,
          content: req.body.content
      };
      var newComment = new Comment(req.params.name, req.params.day, req.params.title, comment);
      newComment.save(function (err) {
        if (err) {
          req.flash(‘error‘, err);
          return res.redirect(‘back‘);
        }
        req.flash(‘success‘, ‘留言成功!‘);
        res.redirect(‘back‘);
      });});

然后打开comment.ejs,修改其中的代码如下所示:

<p>
    <img src="<%= comment.head %>" style="display:inline-block; width:16px; height:16px
    ; box-shadow:0px 1px 4px #888;"/>
    <a href="<%= comment.website %>"><%= comment.name %></a>
    <span> 回复于 <%= comment.time %></span>
</p>

至此,我们就给博客添加了注册用户和未注册用户的头像显示功能。

时间: 2024-11-01 10:51:39

一个简单的blog系统(十四) 增加用户头像的相关文章

一个简单的blog系统(四) 实现用户页面和文章页面

1.现在我们来给博客添加用户页面和文章页面. 1.1 所谓用户页面就是当单击某个用户名链接时,跳转到:域名/u/用户名,并且跳出该用户的所有文章.同样,文章页面就是当单击某篇文章标题时,跳转到:域名/u/用户名/事件/文件名,进入到该文章的页面(也许还有该文章的评论等) 首先,我们先打开post.js,将Post.get修改为Post.getAll, 同时将index.js中的Post.get修改为Post.getAll.在post.js最后添加如下代码: 1 //获取一篇文章,根据用户名,发表

一个简单的blog系统(十) 增加pv统计和留言统计

1. 现在我们来给每篇文章增加pv统计和留言统计功能. 假设:在主页.用户也和文章页均可以显示pv统计和留言统计 首先,打开post.js,修改代码如下所示: //要存入数据库的文档 var post = { name: this.name, time: time, title: this.title, post: this.post, tags: this.tags, comments: [], pv: 0 }; 然后,修改Post.getOne()为如下所示: //获取一篇文章,根据用户名,

一个简单的blog系统(三) 增加文件上传功能

1. 一个完整的博客怎么能缺少图片呢,目前上传文件的方法有三种: (1)使用Express自带的文件上传功能,不涉及数据库. (2)使用Formidable外部模块,不涉及数据库. (3)上传到MongoDB,涉及到数据库. 可以看出,第一种方式最简单,Express通过bodyParser()解析请求体,因此我们可以使用bodyParser()来实现文件的上传功能. 2.实现过程 2.1 首先打开header.ejs,在<li><a href="/post" tit

Python高级编程之生成器(Generator)与coroutine(四):一个简单的多任务系统

啊,终于要把这一个系列写完整了,好高兴啊 在前面的三篇文章中介绍了Python的Python的Generator和coroutine(协程)相关的编程技术,接下来这篇文章会用Python的coroutine技术实现一个简单的多任务的操作系统 代码如下,可看注释 1 #-*-coding:utf-8 -*- 2 ''' 3 用Python和coroutine实现一个简单的多任务系统 4 ''' 5 # ##Step 1:Define Tasks###########################

Django学习小组出品:一起来做一个简单的Blog第一周文档(教程)

本节是 django blog 项目的开篇,是 django 学习小组的集体学习成果.django学习小组是由我发起的一个促进 django 新手互相学习.互相帮助的组织.小组在一边学习 django 的同时将一起完成三个项目: 一个简单django blog,用于发布小组每周的学习和开发文档 django中国社区,为国内的 django 开发者们提供一个长期维护的 django 社区,聚集全国的 django 开发者到这个社区上来 django 问答社区, 类似于segmentfault 和

Linux下一个简单的日志系统的设计及其C代码实现

1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回值及其执行情况.脚本执行及调用情况等.通过阅读日志文件,我们能够较快地跟踪程序流程,并发现程序问题. 因此,熟练掌握日志系统的编写方法并快速地阅读日志文件,是对一个软件开发工程师的基本要求. 本文详细地介绍了Linux下一个简单的日志系统的设计方法,并给出了其C代码实现.本文为相关开发项目Linux

linux内核分析 第三周 构造一个简单的Linux系统MenuOS

一.计算机的三个法宝 存储程序计算机,函数调用堆栈,中断二.操作系统的两把剑:1.中断上下文的切换,保存现场和恢复现场2.进程上下文的切换. 三.linux内核源代码的分析: ·arch/目录保存支持多种CPU类型的源代码,重点是x86·init目录:含有main.c,内核启动相关的代码基本都在init目录下·ipc目录:进程间的通信·kernel目录:有Linux内核的核心代码.四.构造一个简单的Linux系统 使用实验楼的虚拟机打开shell 1.cd LinuxKernel/2.qemu

Linux内核设计第三周——构造一个简单的Linux系统

Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核源代码分析 arch/目录保存支持多种CPU类型的源代码 其中的关键目录包括:Documentation.drivers.firewall.fs(文件系统).include init目录:含有main.c,内核启动相关的代码基本都在init目录下 start_kernal()函数为启动函数,初始化内

20135327郭皓--Linux内核分析第三周 构造一个简单的Linux系统MenuOS

Linux内核分析第三周  构造一个简单的Linux系统MenuOS 前提回顾 1.计算机是如何工作的三个法宝 1.存储程序计算机 2.函数调用堆栈 3.中断 2.操作系统的两把宝剑 中断上下文的切换 进程上下文的切换 第一讲  Linux内核源代码介绍 arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录.PC机一般都基于此目录. init目录包含核心的初始化代码(不是系统的引导代