V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
hyyou2010
V2EX  ›  分享创造

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

  •  1
     
  •   hyyou2010 · 2019-09-09 15:07:58 +08:00 · 3543 次点击
    这是一个创建于 1684 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个论坛程序是前一段时间学习 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 库,所以界面比较原始。头次写论坛程序,不足之处太多,欢迎朋友们提出批评建议。
    13 条回复    2019-09-17 17:54:52 +08:00
    hyyou2010
        1
    hyyou2010  
    OP
       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
        2
    hyyou2010  
    OP
       2019-09-09 15:14:17 +08:00
    另外,其他的好办,但不知搜索功能怎样做。

    看过 elasticsearch,看得头大,比较麻烦,难道数据库每一步操作都要同步到 elastic 数据库?或者不需实时更新,过一定时间更新一次?这点没搞明白,请知情同学介绍一下。
    zgcwkj
        3
    zgcwkj  
       2019-09-09 17:09:39 +08:00
    支持大佬!既然是初学,为什么不是 express 呢?
    hewelzei
        4
    hewelzei  
       2019-09-09 17:31:46 +08:00
    同在学习 Koa2,后端使用 Typescript + Rollup,开发体验确实非常好,最近也在学 Graphql 这方向的技术栈
    hyyou2010
        5
    hyyou2010  
    OP
       2019-09-09 18:21:59 +08:00
    @zgcwkj 学技术怕过时,所以选 koa2,当然实际上 express 简洁明快并不过时
    @hewelzei 未来也想应用 GraphGL,没来得及
    weixiangzhe
        6
    weixiangzhe  
       2019-09-09 20:59:02 +08:00 via iPhone
    也想些一个 但是一直提不起干劲啊 赞👍
    Chaos11
        7
    Chaos11  
       2019-09-10 09:36:30 +08:00
    po 主是后端?
    hyyou2010
        8
    hyyou2010  
    OP
       2019-09-10 11:32:58 +08:00
    @Chaos11 都沾点皮毛,正打算加强点后端
    duola
        9
    duola  
       2019-09-10 12:23:31 +08:00
    mongodb 实时同步到 elasticsearch。
    hyyou2010
        10
    hyyou2010  
    OP
       2019-09-10 12:41:52 +08:00
    @duola 谢谢,我去学习一下这个实时同步
    galikeoy
        11
    galikeoy  
       2019-09-11 16:35:28 +08:00
    不错,我也想琢磨一个。,
    boboyangmoumou
        12
    boboyangmoumou  
       2019-09-16 09:56:50 +08:00
    可以,顶一个
    hyyou2010
        13
    hyyou2010  
    OP
       2019-09-17 17:54:52 +08:00
    唉,敏感时节,部署的论坛被墙了,需要翻。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1132 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:37 · PVG 07:37 · LAX 16:37 · JFK 19:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.