前言

刚才突然发现评论不显示,仔细看了一眼是由于permalink导致的,同一页面会有两个链接,一个带index.html后缀,一个不带,twikoo默认行为是以uri发起评论查询请求,这就是评论不显示的原因。

看了别人的解决方法,需要修改js渲染时的twikoo.Init()这个方法,也就是添加path

请见#issue 608

但这个方法对我来说不管用,不知道是不是我的问题,于是决定自己动手莫改一下

太长不看省流版
  1. 第一种方法,即上面提到的添加path
  2. 第二种方法,修改twikoo后端,在收到请求后使其去掉index.html
  3. 第三种方法,不推荐但很简单暴力。扫库后添加需要修改的记录(双倍数据量)

我使用的方法
找到你的twikoo引用代码,修改插入数据库的代码data.url = data.url.replace(/index\.html$/, "");
修改关键位置

在save前面添加一句即可

思路

我这里是用的twikoo-vercel,先分析提交评论的代码

我这里用的是网络分析法定位关键字。先随便发一个请求看看关键字

关键字

关键字很明显为COMMENT

直接去仓库里搜COMMENT相关代码

最终定位到调用方法 commentSubmit

comment 提交方法

定位是定位到了,该怎么改呢

这里有个data参数,我们的目的是要把提交的url后的字段index.html给替换掉,这里还需要知道data的结构长什么样

有两个方法,从前端请求或者直接查数据库看看结构是怎么样的。我选择直接查数据库.

关于连接数据库这里不再赘述,看官网指引或者百度都可以

素质三连看一下

数据库查询

马上就可以得知data的数据结构长什么样了

还是不理解的话可以再跟进代码看看这个data和数据库交互的save()方法

数据库交互方法

这其实就很明显了,这里直接加一句data.url = data.url.replace(/index\.html$/, "");任务就完成了

修改关键位置

在save前面添加一句即可

但还有一个问题,之前已经出问题的评论怎么办

这里有两种方法解决

  1. 写程序查库然后一个个修改
  2. getcomment方法再加一句和上面同样的语句

查库版

import pymongo

client = pymongo.MongoClient("")
db = client["test"]
collection = db["comment"]

for doc in collection.find({"url": {"$regex": "index\.html$"}}, {"url": 1}):
new_url = doc["url"].replace("index.html", "")
collection.update_one({"_id": doc["_id"]}, {"$set": {"url": new_url}})

print("Update complete.")

修改twikoo源码版
修改twikoo获取评论的源码

当然改完还要部署到vercel上,需要修改package.json添加version信息(否则设置按钮不会显示),还要把修改后的代码整个加进去。

详情请见我的仓库