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

因为多说要挂了,所以 Spruche 进化了

  •  
  •   Cononico · 2017-04-02 01:48:12 +08:00 · 4315 次点击
    这是一个创建于 2581 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前用 Express 写的博客系统 Spruche (德语:“箴言”),因为偷懒,用了多说,前两个星期看见了多说要关闭的通知,吃惊秒,为多说默哀三秒后,意识到掌握核心技术的重要性。接下来抽空给系统写了个支持第三方登陆的 jQuery 评论框插件,同时也给她升了个级。

    Spruche

    Spruche 拥有以下简单的功能与朴实的特性:

    • 文章编辑、删除、置顶、草稿、特色图片、语法高亮,使用 ueditor 编辑器
    • 支持主题
    • 友情链接管理
    • 多说评论导入
    • 支持微博登陆、回复、赞、踩、举报等功能的高颜值 Servant 评论框插件,其样式拷贝 B 站
    • 系统升级提醒
    • 漂亮的默认主题以及手工绘制的错误页面

    展示

    默认主题直接丢个链接:默认主题

    还是给个截图拉长以下 V2EX 的页面: mobile

    评论框上个截图。

    评论框

    有没有觉得很情切很眼熟,没错,样式是拿 B 站的。是的,就是在 Chrome 里按 F12 抄的样式(听说这里特别注重版权许可,我这么明目张胆地抄会不会被人打?会不会被被封号)。

    评论框为啥要叫 Servant 这么中二的名字,因为是账号是从微博那边召唤过来的,就像是召唤英灵一样,对的,我就是你们的 master 。

    别看样式是抄的,评论框该有的功能还是有的:登陆、点赞、踩之类的,迅速过一下配置参数。

    var defaults = {
        placeholder: '请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。',
        wbAppKey: '',            // 新浪微博开发者引用 appKey
        commentAble: true,       // 是否可以发评论
        announcement: '',        // 评论框公告
        pageNumber: 10,          // 每页评论个数
        childrenNumber: 10,      // 子级评论每页个数
        threadKey: '',           // 页面唯一 key
        title: ''                // 页面标题
      };
    

    后面做得比较搓,主要因为没时间,有时间也要偷个懒。 管理

    环境要求

    因为楼主要用 async ,还要求 MySQL 拥有支持 4 字节 emoji 编码的 utfmb4 ,所以对环境的要求还挺高的:

    • Node >= V7.0
    • MySQL >= 5.5.3

    评论框这么复杂后续也少不了 redis , mysql 跟不上节奏。

    自定义

    模版引擎用的是 ejs ,相关文档和接口定义后续整理。

    写在最后,求颗星星: GitHub

    第 1 条附言  ·  2017-04-02 05:21:35 +08:00
    爱玛,发错图了,抄 B 站的样式的评论框是这张:
    https://www.coolecho.net/upload/images/2017/3/848205310983278592.png
    23 条回复    2017-04-08 11:08:14 +08:00
    Trim21
        1
    Trim21  
       2017-04-02 05:49:59 +08:00
    呃....

    install 后面是不是少了什么..
    Trim21
        2
    Trim21  
       2017-04-02 05:51:31 +08:00
    @Trim21 好吧,我错了..大半夜意识模糊了.
    Systemd
        3
    Systemd  
       2017-04-02 06:50:12 +08:00 via Android
    Sprüche ?
    cocochan
        4
    cocochan  
       2017-04-02 08:47:03 +08:00 via iPhone
    franklinyu
        5
    franklinyu  
       2017-04-02 08:56:21 +08:00
    协议已经是 Apache 了吧, README 没改
    slixurd
        6
    slixurd  
       2017-04-02 11:40:08 +08:00
    鄙视 MySQL 是政治正确么...
    你能跑到单表上亿的数据么,没有上亿的数据说什么 MySQL 跟不上节奏........
    dphdjy
        7
    dphdjy  
       2017-04-02 11:51:15 +08:00
    看图标加 star
    garipan
        8
    garipan  
       2017-04-02 11:54:00 +08:00
    23333333333333
    chuanwu
        9
    chuanwu  
       2017-04-02 12:06:26 +08:00
    楼主你想说的是 utf8mb4 吧?

    还有我不太明白你说评论框这么复杂, mysql 跟不上节奏,你能说下具体的场景么?
    Aspx
        10
    Aspx  
       2017-04-02 12:33:40 +08:00
    还好我这种用静态博客的不需要评论
    Cononico
        11
    Cononico  
    OP
       2017-04-02 12:36:52 +08:00 via iPhone
    @slixurd 什么时候鄙视 mysql 了,不管你跑几个表单有几条记录,频繁改动的数据(比如几个人一直重复在哪里点赞踩)并不适合一开始就往数据库里直接搞。再比如新消息回复的队列,没必要往数据库里扔吧,这次读完了之后下次就不用了,用个 redis 有什么错。虽然博客系统可能没什么人点赞,但用先用缓存固定时间在导入 mysql 有什么错?合适的地方用合适的东西,再说明一下,没有鄙视 mysql ,否则我也不会用 mysql 。
    Cononico
        12
    Cononico  
    OP
       2017-04-02 12:48:39 +08:00 via iPhone
    @chuanwu 对的,漏了个 8 。跟不上节奏,不是说他慢,毕竟一个博客请求很低看不出效果,说的是评论系统中有些地方不太适合直接往里面塞。如消息回复提醒队列,没必要又建一张中间表,那我又得同时操作几张表换来一个 length 可能为 0 的队列,实在有点麻烦,放在缓存中用起来也方便。另外用户读完了,这条记录也用不着了,我不能直接 delete 掉,这对表不好,我只能加个字段证明他没用了,后来一张表里记着一大列用不上的记录。
    slixurd
        13
    slixurd  
       2017-04-02 13:07:36 +08:00
    @Cononico
    数据量小用 MySQL 做消息回复提醒没什么不好的...
    加个中间件只会引入额外的复杂度
    合不合适不能只看功能...
    我觉得 SOA+RPC+服务发现也是很合理的架构....
    但是肯定不会在这个量级这个场景下去做.....
    ivmm
        14
    ivmm  
       2017-04-02 13:11:57 +08:00   ❤️ 2
    如果单独把评论拿出来做,获得的关注度绝对会比整合后的一个博客系统高
    ooTwToo
        15
    ooTwToo  
       2017-04-02 15:14:20 +08:00 via iPhone
    不错啊ꉂ ೭(˵¯̴͒ꇴ¯̴͒˵)౨”

    坨坨肉的 http://comment.moe 也好用
    jexb
        16
    jexb  
       2017-04-02 18:30:16 +08:00 via iPhone
    node.js 是搞笑得
    diefishfish
        17
    diefishfish  
       2017-04-03 15:49:58 +08:00
    @ooTwToo #15 肉肉那个怎么获取文章评论数插入到文章页面里...他个懒癌不更新
    hpu423
        18
    hpu423  
       2017-04-03 20:28:45 +08:00
    不错
    ooTwToo
        19
    ooTwToo  
       2017-04-04 10:04:50 +08:00 via iPhone
    @diefishfish 啊?底部貌似有的
    diefishfish
        20
    diefishfish  
       2017-04-04 10:46:59 +08:00
    @ooTwToo #19 不不不我说的是单独获取出来放在文章标题下面的那种!
    ooTwToo
        21
    ooTwToo  
       2017-04-04 22:19:48 +08:00   ❤️ 1
    @diefishfish 可以通过 js 获取到条数啊
    diefishfish
        22
    diefishfish  
       2017-04-07 21:20:24 +08:00
    @ooTwToo #21 求 js
    ooTwToo
        23
    ooTwToo  
       2017-04-08 11:08:14 +08:00 via iPhone
    @diefishfish 获取元素组的 length
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1949 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:20 · PVG 00:20 · LAX 09:20 · JFK 12:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.