[NodeJs] Express + Mongodb + Materialize 搭建多人博客

时间:2020-12-02 02:37:50

一个用 ExpressMongoDBMaterialize 搭建的小型多人博客。

由于本人也只是基本学了下这些框架,第一次写个小型博客来练练手,基本功能已经实现,还有些其他功能未完全实现,会持续更新。
另外,可能还有些小细节没有注意到,如果有发现哪里有 bug 或者好的建议,请不吝指出,谢谢。

在线预览: http://118.89.16.142/
管理员账号: admin
密码: microblog

只有用这个账号才可以发表、修改、删除文章,删除评论等。
自己新注册的为普通用户,只能修改个人信息,发表评论、回复。想要体验一下的,直接用这个公共账号就可以啦。

另外,若是自己注册,找不到确认邮件的话,请检查一下 垃圾邮件,很可能被误当作 垃圾邮件 处理了。

环境

  • Node: v7.0.0
  • Express: 4.x
  • MongoDB: v3.2.10

效果预览

主页
[NodeJs] Express + Mongodb + Materialize 搭建多人博客

文章列表
[NodeJs] Express + Mongodb + Materialize 搭建多人博客

文章详情
[NodeJs] Express + Mongodb + Materialize 搭建多人博客

使用方法

启动

首先,根据自己需要改写 modules/config.jssecretmailServer

secret 在加密部分使用。
mailServer 用以发送确认邮件来实现确认账户和找回密码。

secret: process.env.BLOG_SECRET,
...
mailServer: {
host: process.env.MAIL_HOST,
secureConnection: true,
port: parseInt(process.env.MAIL_PORT),
auth: {
user: process.env.MAIL_USERNAME,
pass: process.env.MAIL_PASSWORD,
}
},

例如,使用 163 邮箱的 SMTP。

secret: 'microblogsecret',
...
mailServer: {
host: 'smtp.163.com',
secureConnection: true,
port: 465,
auth: {
user: 'yourUsername@163.com',
pass: 'yourPassword',
}
},

当然,最好还是在系统环境变量里设置这些值。

然后,根据需要更改文件 bin/www 中的数据库连接,默认为

mongoose.connect('mongodb://localhost/microblog');

上述操作完成后就可以正常启动了。

权限管理

暂时只能通过数据库直接操作,将 userrole 手动改为 1 (管理员),2 (博客所有者,拥有最高权限)。

介绍

基本的功能还有数据模型,文章编辑仅支持 markdown 语法。
文章编辑器的基本实现参考之前写的 Express 处理 markdown——marked+prism+github-markdown-css
找回密码、用户确认使用的邮件服务也可参考 nodemailer 发送邮件

功能

  • 文章
    • 发表、删除、修改
    • 分类加标签
  • 评论
    • 只有登录了的用户可以使用评论功能
    • 评论、回复、删除 (回复评论只能回复一级)
  • 用户
    • 登入、登出
    • 注册
    • 找回密码、更改密码
    • 修改个人信息

用户权限

  • 用户
    • 添加、删除评论
    • 修改个人信息
  • 管理员(附加)
    • 发表、修改、删除自己的文章
    • 删除自己文章下的评论
      不能直接删除博客所有者的评论,可以间接删除含博客所有者评论的文章或者含博客所有者回复的非博客所有者的评论
  • 博客所有者(附加)
    • 所有文章修改、删除
    • 所有评论删除

数据库模型

  • User
    • id (ObjectId)
    • username (String,长度3-10,[0-9a-zA-Z-_])
    • email (String)
    • password (String,长度6-18,[0-9a-zA-Z+-*/=!?@_])
    • avatar (String link)
    • registDate (Date)
    • confirmDate 发送激活时间(Date)
    • confirmed 是否激活(Boolean)
    • role 身份(Number 0: 普通用户,1: 管理员,2: 所有者)
    • encrypt 密码是否已经加密(Boolean)
  • Article
    • id (ObjectId)
    • title (String)
    • author (ref: ObjectId)
    • content (String)
    • intro (String)
    • categories (ref: ObjectId, array)
    • comments (ref: ObjectId, array)
    • publishDate (Date)
    • updateDate (Date)
    • pageviews (Number)
  • Category 分类
    • id (ObjectId)
    • name (String)
    • count (Number)
    • articles (ref: ObjectId, array)
  • Comment
    • id (ObjectId)
    • article (ref: ObjectId)
    • author (ref: ObjectId)
    • content (String)
    • time (Data)
    • replies (ref: ObjectId, array)
  • Reply
    • id (ObjectId)
    • article (ref: ObjectId)
    • author (ref: ObjectId)
    • content (String)
    • time (Data)
  • Avatar
    • id (ObjectId)
    • name (String)
    • src (String)

视图

  • 主页
  • 文章列表页
  • 文章单页
  • 个人信息页

附件

完整代码: blog-materialize - Github