实践问题总结:
1, 出于学习目的,从koa2和egg中选了前者,但直接用koa2需要自己去找中间件,找库,找轮子,比较麻烦且难以最优。比如文件上传,日志,session等等,都找了好几个库来试,也不好把握以后扩展是否可以。所以未来做正式项目还得找比较完善的框架,比如nestjs或eggjs之类。
2, 第三方的ui库,如materail-ui或antd多少比较重,特别是前者,对程序主体影响比较大,所以最好尽量少用,初中期不使用,在后期可以考虑。这样非常灵活,以后可以根据选择不同的ui库。
3, 小项目不要使用大第三方库。比如界面的语言切换,考察过相关的i18n库,几乎看不懂,太完善,太庞大,太麻烦了,最后仍然使用redux.store简单处理。这点也说明使用完善的框架比使用koa2要强太多了。
4, 在项目基本完成之后才把前端代码转换为typescript的,所以不全面,且不太地道。从代码查错说效果还是很不错的,以后考虑常用。可能后端才是应该尽量用typescript,毕竟后端出错的危害要远远大过前端出错。以后尽量一开始就使用,后面再改比较繁琐。
5,有的问题不身临其境就感受不到。比如,更换头像后,头像链接将指向新头像的那个新地址,这个小设计给后续编程造成了极大的麻烦。比如头像链接就无法直接存放在post或comment信息里面,因为用户更换头像后之前的头像链接失效。临时的处置是,数据库先查询post及comment,然后aggregate查询user数据表以获取最新头像链接。vote及lineup也一样麻烦。最后采取的方案是,头像链接地址始终不变,新头像替换旧头像时沿用旧头像的文件名。这可能导致客户端头像不刷新,需要加随机数来帮忙刷新,但最后考虑到这不是高频操作,还是reload客户端更为干净。
6,有的功能细节意外的多,比如匿名功能,需要考虑:post与comment的匿名,我的匿名与他人匿名的差异,oauth登录用户的匿名,投票与接龙的匿名,投票人及接龙人的匿名,所有情况下鼠标在头像上悬停时的不同提示,此外匿名时的隐匿信息不应该传递到客户端,必须在服务端就过滤好。如此这样,这工作量是出奇的多。这里说明编码之前的产品需求与设计是很重要的,可以发现工作量意外大的一环。