学习 nodejs,初步写了个简版论坛

2019-09-09 15:07:58 +08:00
 hyyou2010
这个论坛程序是前一段时间学习 koa2 的实践作品,技术栈是“koa2+react+mongodb”,已部署到: http://65.49.193.60:3001

已经初步实现的功能:

发帖 /删除 /更改 /置顶 /点赞 /匿名
接龙 /投票
登录注册 /修改密码 /通过邮件重置密码 /GitHub 登录
用户角色( admin/bm/user 三级)及用户管理
上传头像及修改
中英文界面切换
markdown 编辑
板块可配置
保存退出时状态

尚未实现功能:

搜索
私信
@
图片或文件上传
后台管理

client: https://github.com/maxyou/purebbs
server: https://github.com/maxyou/purebbs-server

出于学习的目的,尽量不使用第三方 UI 库,所以界面比较原始。头次写论坛程序,不足之处太多,欢迎朋友们提出批评建议。
3554 次点击
所在节点    分享创造
13 条回复
hyyou2010
2019-09-09 15:10:03 +08:00
1, 出于学习目的,从 koa2 和 egg 中选了前者,但直接用 koa2 需要自己去找中间件,找库,找轮子,比较麻烦且难以最优。比如文件上传,日志,session 等等,都找了好几个库来试,也不好把握以后扩展是否可以。所以未来做正式项目还得找比较完善的框架,比如 nestjs 或 eggjs 之类。

2, 第三方的 ui 库,如 materail-ui 或 antd 多少比较重,特别是前者,对程序主体影响比较大,所以最好尽量少用,初中期不使用,在后期可以考虑。这样非常灵活,以后可以根据选择不同的 ui 库。

3, 小项目不要使用大第三方库。比如界面的语言切换,考察过相关的 i18n 库,几乎看不懂,太完善,太庞大,太麻烦了,最后仍然使用 redux.store 简单处理。这点也说明使用完善的框架比使用 koa2 要强太多了。

4, 在项目基本完成之后才把前端代码转换为 typescript 的,所以不全面,且不太地道。从代码查错说效果还是很不错的,以后考虑常用。可能后端才是应该尽量用 typescript,毕竟后端出错的危害要远远大过前端出错。以后尽量一开始就使用,后面再改比较繁琐。

5,有的问题不身临其境就感受不到。比如,更换头像后,头像链接将指向新头像的那个新地址,这个小设计给后续编程造成了极大的麻烦。比如头像链接就无法直接存放在 post 或 comment 信息里面,因为用户更换头像后之前的头像链接失效。临时的处置是,数据库先查询 post 及 comment,然后 aggregate 查询 user 数据表以获取最新头像链接。vote 及 lineup 也一样麻烦。最后采取的方案是,头像链接地址始终不变,新头像替换旧头像时沿用旧头像的文件名。这可能导致客户端头像不刷新,需要加随机数来帮忙刷新,但最后考虑到这不是高频操作,还是 reload 客户端更为干净。

6,有的功能细节意外的多,比如匿名功能,需要考虑:post 与 comment 的匿名,我的匿名与他人匿名的差异,oauth 登录用户的匿名,投票与接龙的匿名,投票人及接龙人的匿名,所有情况下鼠标在头像上悬停时的不同提示,此外匿名时的隐匿信息不应该传递到客户端,必须在服务端就过滤好。如此这样,这工作量是出奇的多。这里说明编码之前的产品需求与设计是很重要的,可以发现工作量意外大的一环。
hyyou2010
2019-09-09 15:14:17 +08:00
另外,其他的好办,但不知搜索功能怎样做。

看过 elasticsearch,看得头大,比较麻烦,难道数据库每一步操作都要同步到 elastic 数据库?或者不需实时更新,过一定时间更新一次?这点没搞明白,请知情同学介绍一下。
zgcwkj
2019-09-09 17:09:39 +08:00
支持大佬!既然是初学,为什么不是 express 呢?
hewelzei
2019-09-09 17:31:46 +08:00
同在学习 Koa2,后端使用 Typescript + Rollup,开发体验确实非常好,最近也在学 Graphql 这方向的技术栈
hyyou2010
2019-09-09 18:21:59 +08:00
@zgcwkj 学技术怕过时,所以选 koa2,当然实际上 express 简洁明快并不过时
@hewelzei 未来也想应用 GraphGL,没来得及
weixiangzhe
2019-09-09 20:59:02 +08:00
也想些一个 但是一直提不起干劲啊 赞👍
Chaos11
2019-09-10 09:36:30 +08:00
po 主是后端?
hyyou2010
2019-09-10 11:32:58 +08:00
@Chaos11 都沾点皮毛,正打算加强点后端
duola
2019-09-10 12:23:31 +08:00
mongodb 实时同步到 elasticsearch。
hyyou2010
2019-09-10 12:41:52 +08:00
@duola 谢谢,我去学习一下这个实时同步
galikeoy
2019-09-11 16:35:28 +08:00
不错,我也想琢磨一个。,
boboyangmoumou
2019-09-16 09:56:50 +08:00
可以,顶一个
hyyou2010
2019-09-17 17:54:52 +08:00
唉,敏感时节,部署的论坛被墙了,需要翻。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/599318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX