疫情前期,员工分布在各个地区,需要上报个人的健康状态和位置信息,于是做了一个单页面应用(当时钉钉和微信上的健康上报模板还没出现)
如果把它快速的扩展到别的公司使用,通常的方法是在数据库表中新增一个表示公司的company字段,同时还得修改前端和后台代码增加这个company字段。
但是我们不这样做。
参考华为welink为单独每一个公司开辟一个单独的数据库和服务器以达到公司间数据和应用完全物理隔离目的,我们使用了json文件当做员工表,我们只需为在数据库report中为不同公司单独创立名字为公司名称的数据表空间来存储签到表,以及为每一个公司都单独部署这个服务端程序。
由于我们使用json文件来作为员工表。我们很容易为不同的公司编辑一个json文件。
由于使用的Python中的tornado作为Web框架,在启动server时我们很容易命令行参数中直接传递公司名称和端口名称
这里company表示使用哪个json文件名称,db表示使用哪个数据库,port表示应用端口
但是我们无论前端还是后台代码只有一份,所以Python代码中要读取命令行参数配置。
同时使用tornado开发的后端Python程序渲染HTML模板时将命令行参数的company传递到前端页面中。
JavaScript通过获取id=company的隐藏域的值来对应不同公司员工信息的json路径。
同样一份代码,上面已经为不同的公司分别在不同端口运行了多个应用,但是同一个域名用端口来区分访问不太友好,所以最后使用了Nginx来为它们做了端口映射,同时做了静态文件代理。