西游天下论坛交流区,大神带你玩转西游世界!

今天跟大家唠唠我前段时间搞的那个“西游天下论坛”项目,纯属个人爱没事儿瞎折腾,记录一下,以后也好回顾。

一开始就是想自己搭个论坛玩玩,毕竟逛了这么多年的论坛,也想自己当一把“版主”。选了个比较有情怀的题材——《西游记》,就起了个名字叫“西游天下论坛”。

第一步:技术选型

一开始有点懵,毕竟好久没自己从头搭建一个完整的项目了。考虑了几个方案:

  • PHP + Discuz!:这个最简单粗暴,直接套用现成的论坛程序,改改模板就完事。但想着都啥年代了,PHP 玩得也少,而且 Discuz! 感觉有点老气横秋。
  • Java + Spring Boot:这个技术栈我熟,但想想搭个论坛是不是有点重,而且前端也得自己写,比较费时。
  • Python + Django/Flask:Python 也还行,但论坛相关的轮子感觉没有 Java 多,而且性能上可能差点。

我选了 * + Express + MongoDB。原因很简单,JavaScript 前后端通吃,而且 * 轻量级,MongoDB 文档型数据库也比较适合论坛这种数据结构不太复杂的应用场景。更重要的是,我想借这个机会好好学习一下 *。

第二步:搭建基本框架

有了技术选型,就开始撸代码了。用 Express 生成一个基本的项目框架:

express --view=pug myforum

然后,安装一些必要的依赖:

npm install mongoose body-parser cookie-parser express-session bcryptjs passport passport-local connect-mongo

这些依赖分别是:

  • mongoose:MongoDB 的 ORM,方便操作数据库。
  • body-parser:解析 HTTP 请求体。
  • cookie-parser:解析 Cookie。
  • express-session:Session 管理。
  • bcryptjs:密码加密。
  • passport 和 passport-local:用户认证。
  • connect-mongo:将 Session 存储到 MongoDB。

第三步:数据库设计

论坛的数据主要包括:用户、帖子、回复、板块等等。我简单设计了一下 MongoDB 的 Schema:

  • User:用户表,包含用户名、密码(加密后存储)、邮箱、注册时间等字段。
  • Post:帖子表,包含标题、内容、作者、发布时间、所属板块等字段。
  • Reply:回复表,包含内容、作者、回复时间、所属帖子等字段。
  • Category:板块表,包含板块名称、描述等字段。

用 Mongoose 定义好 Schema,就可以方便地进行数据库操作了。

第四步:用户认证

用户认证是论坛的基础功能,我用了 * 这个库。* 提供了各种认证策略,我这里用了 passport-local 策略,也就是用户名密码登录。主要流程是:

  • 用户提交用户名和密码。
  • 后端验证用户名是否存在。
  • 如果用户名存在,则验证密码是否正确(用 bcryptjs 对比加密后的密码)。
  • 如果用户名和密码都正确,则生成 Session,并将用户信息存储到 Session 中。
  • 后续请求通过 Cookie 中的 Session ID 来验证用户身份。

第五步:帖子和回复功能

这部分就是论坛的核心功能了。主要实现了:

  • 创建帖子:用户在指定板块下发布帖子。
  • 查看帖子:展示帖子内容和所有回复。
  • 回复帖子:用户回复帖子。
  • 分页:帖子和回复都支持分页显示。

这部分的代码比较繁琐,主要就是 CRUD 操作,配合前端的 PUG 模板引擎,把数据渲染到页面上。

第六步:一些细节优化

除了基本功能,我还做了一些细节优化:

  • XSS 防御:对用户输入的内容进行转义,防止 XSS 攻击。
  • CSRF 防御:使用 csurf 中间件,防止 CSRF 攻击。
  • Markdown 支持:使用 marked 库,支持 Markdown 语法。
  • 头像上传:用户可以上传自己的头像。
  • 权限控制:管理员可以删除帖子和回复。

第七步:部署上线

把项目部署到服务器上。我用了阿里云的 ECS,安装了 * 和 MongoDB,然后用 PM2 管理 * 进程。域名也申请好了,反向代理也配置了,论坛就可以正常访问了。

总结

这回“西游天下论坛”项目,虽然只是个小玩具,但还是学到了不少东西,特别是对 * 和 MongoDB 的理解更深了。也踩了不少坑,比如 * 的配置、Session 管理、各种安全问题等等。不过解决这些问题也是学习的过程。以后有时间,还会继续完善这个论坛,比如增加搜索功能、站内消息、积分系统等等。

折腾使我快乐!