前言
提问箱这种东西,大概在一年多之前我就想给自己做一个,但那个想法想了下,并没有将之付诸行动。
直到上一周吧,突然知道国内的popiask倒了,我挺惊讶的,我不知道他为什么会倒下,但据说是备案没了,好像也挺合理的,毕竟只要有用户输入的地方就什么东西都可能出现,如果没有足够的审核力量的话,在国内只有被枪毙的命。
然后,我脑子突然抽了,就想自己动手整一个提问箱了,虽然自己可能不用,或者说没有人会给我提问的,但还是整了出来吧。
技术选择
前端:Vue + iView
后端:Serverless function (nodejs) + Mongodb
部署:Vercel.com + Mongodb.com
除了Serverless function 以外,都是自己熟悉用开的东西,很顺手就掏出来用了。
之前有个项目我听别人说,没去选iView选了个ant-design-vue,结果要那套东西,只有基础东西,但更加精细的东西是缺失的,只能够东找一个东西,西找一个东西,自己缝缝补补,搞出个缝合怪来顶着用,很难受,把我动力都给磨没了。
后端这块我掏出的Serverless function对我来说,用了一下,有爽有不爽的地方吧,爽的地方就是直接把每一个接口都对应在了文件路径上,不需要去搞一堆route之类的,放在对应的位置就完事了。不爽的地方就是,我没有找到合适的调试方法,本地测试的时候都是一次调用一个nodejs实例,用完就没了,完全没法去attach打断点调试,调试的时候只能够靠反复console.log和F5调用,要是能打断点慢慢看对象,顺带repl一发后面的代码,能提高效率。
部署的时候我选了两个白嫖的东西,Vercel这家是面向前端开发服务的,他们对所有个人提供无限流量的CDN、持续构建、Serverless function和自定义域名,之前只是当他一个白嫖的静态站来用,就像现在这个博客,这次叠加上Serverless function来使用还是第一次。他这边的serverless function帮我省了不少事,不用自己去解析请求体,直接开箱就是解析好的东西,对我这种弱渣简直是福利。Mongodb这边呢,之前偶然留意到他家提供免费的512MB的mongodb服务器,然后开了一下,在前面的项目中尝试性的使用了一下,然后就丢下来了,到了上周翻出来用的时候,发现还是活着的,还发现似乎可以无限白嫖512的样子,所以就用下来了。
不足
由于Vercel这边似乎没有保留实例预热的功能,结果就是在第一次调用访问数据库的操作都需要等个两三秒才能够响应过来,但好在他不是立刻销毁实例,似乎还会让他运行一段时间,所以短时间内后面的数据库操作相应速度还是可以的。
但也由于同样的原因,我为了保证打开页面的速度,只好把主播页的配置写死成config.js随代码一起发布,而不是存入数据库,进而导致我无法做账号系统之类的。不过也给我省了一些事,毕竟写个账号系统也是需要多一堆东西,例如说注册登录改密码之类的,这些都挺烦的。
还有一个就SSR,很想做的说,毕竟做了之后后面请求的时候就能直接显示是谁的提问箱,但我今天测试的时候,前端构建的代码并不在serverless function可以读到的范围内,只好作罢了。
未来
大概是增加一部分自定义化的东西吧,同时尝试结合github action之类的,实现主播自主修改一部分东西,虽然这样来风险有点大,但还是可以试一下的。
另一方方面就是研究下国内的serverless function生态,看看能不能提供一套让国内pro势自己部署管理的方案什么的。