README.md
By Vue component
最近一个月的几个小物件。
这个项目是大概在新年初二左右发布的,主页在 mongodb-data-api 。
正如之前提到的 README.md 项目,项目初期,我在基于 MongoDB Cloud Atlas 的免费云数据库实现了 counter 访问计数能力 之后,很快遇到了瓶颈:
综上原因,导致一个 counter 请求挂掉的概率超过了 50%,更别说高 QPS 可用性了。
并没找到好办法,研究了 MongoDB Cloud 的访问策略控制能力之后,我决定将集群从 HK 迁到美东。 在迁移的过程我发现 MongoDB Atlas 已经推出了 Data API 的 Beta 版,是 2021 年 11 月才对外开放的。 简单研究了下,发现这玩意简直就是完全为 Serverless 打造的;将数据资源 HTTPS 化,所有的数据操作完全变成了 HTTP 请求,虽然还有点小缺陷,无法支持细粒度的权限控制,一个 API KEY 可以访问整个集群所有库的所有数据,不过没关系,后面肯定会迭代和升级。 如此便很完美了,去 GitHub 看了看,相关信息寥寥无几,直接调用的话,TS 类型方面非常不友好,于是我决定,那就自己动手再造一个轮子吧。
所以调研成果大概是:
于是我做了这几件事:
最终,效果很不错! counter 接口有求必应!
如果你有在 Serverless 访问 MongoDB 的需求,可一定要来试试!
其实 MongoDB Atlas 的 HTTP Data API 可以看做专为 Serverless 设计的一种数据消费能力,我想 Vercel 官方正在开发的插件应该也是差不了太多的。
重构,重构,还是重构。
之前的 queryparams.decorator
的设计实在是太拉胯了,职责不明,不同作用域的上下文逻辑互相耦合,于是用基于 class-validator
及 class-transformer
将原有的 Schema Validate、Permission Validate、Guest default value,能力分别抽象为了 Pipe 流的实现。
以及 NodePress 做了非常多的细节的优化和改动,当然这些都一一更新至 设计文档 了。
1. 流媒体
调研了一些资料,期待将播放器从网易云迁到 Spotify,但是 Spotify 好牛逼啊,各种黑科技限制你 “无登录用户 Token 在哪听啥都是 30 秒”,算了,放弃了,也就是 BGM 听个响,如果你对歌单有兴趣可以关注 这里 和 这里 。
但是播放器的 UI 和交互我还是重新设计了的!
2. 聚合日历
之前的 GitHub contributions calendar 怎么看都不顺眼,很难调教。
于是:
aggregate
的能力实现了查询 NodePress 文章日历的 API,可以以日期的形式统计每个当日的内容发布量。public getCalendar(publicOnly: boolean, timezone = 'GMT') {
return this.articleModel
.aggregate<{ _id: string; count: number }>([
{ $match: publicOnly ? ARTICLE_LIST_QUERY_GUEST_FILTER : {} },
{ $project: { day: { $dateToString: { date: '$create_at', format: '%Y-%m-%d', timezone } } } },
{ $group: { _id: '$day', count: { $sum: 1 } } },
{ $sort: { _id: 1 } },
])
.then((calendar) => calendar.map(({ _id, ...r }) => ({ ...r, date: _id })))
.catch(() => Promise.reject(`Invalid timezone identifier: '${timezone}'`))
}
于是最终,是这样一个聚合日历,你可以在 PC 端访问 About 页面查看。
就这么多,接下来我要做别的事了。
完。
得到了真大佬的一个赞,整挺好 😃 。
回复:
真厉害👍
这不得好好奖励自己,吃顿大餐啥的๑乛v乛๑
回复:
救命,表情符号被迫换行了。😱
没登录,删不了了,这得逼死强迫症。😅