menu search

Christmas Lights

Dec 26, 2017

并不是信徒,也没有庆祝。圣诞节对我来说只是寒假的开始罢了。

评论系统

去年年底用 Staticman 搭建了博客的的第一版自定义评论系统,用于替代 Disqus。后来在新年的第一天写了个 PHP + MYSQL 版本,以便备份数据。今年暑假重构了这个版本,拓展了文章点赞功能。

然后今年寒假又坐不住了,用 Node.js 再次重写,并搬到 Google Cloud Functions 上。数据库也从 MYSQL 换到了 Cloud Firestore,连带着空间全绑在 Google 云上了。

要不是因为 Hostker 一天到晚宕机,加上评论邮件经常发不出去(用的是Mailgun API,可能内地请求被阻扰) 我才不会动手…

宕机

对 PHP 和 Node 都不太在行。不过想了想感觉还是对 JS 比较了解。但开写了之后才发现问题真的是多。

首先,Cloud Functions 只支持 Node 6,这可是去年发布的版本啊,现在最新的版本号都刷到 8 了。我本地调试用的是 8,写的很舒服,然后一部署:

async function getPostData(postID) {
        ^^^^^^^^

SyntaxError: Unexpected token function

最后只能用嵌套Promise解决,代码都看不下去了。感受下把多个await改成Promise.then的痛苦。

除此以外还不能用...,不过可以用Object.assign达到一样的效果。

let commentData = {
	'author': '...',
  	'email': 'example@gmail.com',
  	'message': 'Hola.'
};

let newCommentData = {
	...commentData,   /// Nope
  	'id': '895e4c64360f69a99379a9'
};

let newCommentData = Object.assign({}, commentData, {
  'id': '895e4c64360f69a99379a9'
});

有个很让我惊喜的地方:处理完评论后可以先返回数据,然后继续处理发评论邮件之类的耗时任务。用PHP的时候就得搞个队列来减少评论提交耗时。

前端倒是没什么问题,脚本里面改个地址就能上线。个人感觉速度比之前快了很多,可能是因为Google的CDN。(之前欧洲用户会访问Hostker的美国服务器)


Firebase 上搭建评论系统 (想法)

其实我也可以直接用 Firebase 的前端 SDK,但数据安全规则搞起来也挺麻烦的,还不如自己写个后端来筛取需要输出的数据。而且 Firebase SDK 挺大的,不想拖慢页面加载速度。

圣诞礼物

几何最后没有挂科。期末成绩马马虎虎,并没有达到自己的理想状态。

美术老师送了圣诞礼物给我,真的很感动。里面是盒“玩具树”,那种浇了包“水”后会开花的纸树。

最后

最近中了这首歌的毒,完全停不下来。可惜唱不好:

Wair Chan, [24.12.17 08:59]: 你唱得很跑

争取唱好这首歌 🌚

Comments

edit x send markdown image
paragraph comment heart