使用Netlify Functions代理将Waline评论系统全面融合到博客之中
最近总算是搞完了整个零神站点的迁移以及博客外观、功能上的修缮,现在可以折腾一些其它的东西了。
目前网站是由一个Hexo生成的静态博客和Waline评论系统组成的,在Netlify中是两个项目也就需要两个域名。在Vercel时期,我是刚刚从Valine升级至Waline,就比较懒,直接两个域名贴上去。
- zerokami.cn 主站&博客
- waline.zerokami.cn Waline评论系统
在文章页面通过waline.js直接调用waline.zerokami.cn。但在迁移之后总看总不顺眼,要是能把它合并到zerokami.cn主站的域名就好了。
分析
现在我想到了两种方法:
- 将Waline项目合并到主站的仓库中。
- 通过某种方式将Waline挂靠在主域名的目录下。
将Waline项目合并到主站的仓库中
先说第一种方法,这种方法非常的不推荐,有很多麻烦:
- 每次发布和部署主站时,Waline也要跟着一起部署,项目部署的时间会增加,同时也会增加CPU时间的消耗。
- 不好管理。有可能在对主站项目动手脚的时候,也一起误伤了Waline,分开分库比较好。
- 合并比较麻烦,我不想动脑子。
基于以上的几种原因,我还是想要通过更为简单的方式来解决这个问题。
通过某种方式将Waline挂靠在主域名的目录下
能通过什么方式来弄呢,直接通过网址200重定向怎么样?
1 | [[redirects]] |
将其合并到主页的Netlify配置文件中,也确实生效了。评论系统是正常生效的,但是如果通过此网址来登入后台就出现很多的问题了,各种报错……
我是没想到客户端的Waline还能正常工作,例如查看评论,除了没法评论。要跳转到外部 URL 且保持网址不变,单纯的 200 重定向(代理)会导致某些功能的地址出错,既然如此,我们还是得要想想其它的方法来解决问题。
后面各种搜索问题,最后还是找AI给了个解决方案-创建一个 Netlify Function 来转发Waline评论系统。
首先就是得要在静态网页的根目录下创建或修改以下几个文件:
1 | / |
package.json文件
1 | { |
你可以用我的package.json文件,也可以自己在目录下通过命令创建:npm init -y、npm install node-fetch@2。
netlify.toml文件
1 | [[redirects]] |
其中第一个重定向就不必多说了吧,把它转换到自己想要设置的地址。
第二个是信任代理传递的IP,这个主要是用来接收评论发送时的地址。如果配合代理进行设置的话,你在Waline后台看到的IP地址就全都是Netlify节点的IP地址了,那么这个功能就彻底没有啥作用了。
comment-proxy.js文件
1 | exports.handler = async (event) => { |
这个没有什么,就是设置代理转发等等。如果要用的话需要改成你项目的域名以及你需要跳转的地址。(要和netlify.toml文件一起修改。)
在一切都配置好以后,重新部署就能够生效了,各位可以尝试一下这样做,目前我是没有遇到什么太大的问题,除了后台控制面板登出的时候url还是会跳错,这个问题到时候看看能不能修改comment-proxy.js文件修复,到时候再说吧。