今天新接手了一个项目,用的技术栈不多,发贴记录下接手的过程,为以后做其它项目时改进和规范开发流程
发布于 5 年前 作者 zengming00 5083 次浏览 来自 分享

技术栈不多,只有express、mongodb和redis 还有完全没必要用的docker,似乎只有一台服务器 进程管理居然还是用的forever 缺少错误收集机制,更不用说故障报警 有日志模块,但是却多个服务写在同一个文件,毫无疑问如果开多进程日志有很大的风险被覆盖 前后端没有完全分离,有少量代码使用了ejs模板,完全可以砍掉做到前后端完全分离(前后端代码放一起难以分清哪些是前端哪些是后端,混乱) 因为有两个web服务入口点,其中一个是管理后台,完全不需要nginx却也套了一层,可以砍掉 产品文档、数据库表文档、运维文档之类还算有,不过有点多余,因为那些都是基础的东西,关键部分的文档却没有 没有接触到线上环境,从代码上看没有任何async/await到处是var和.then().then(),明显node版本应该在4.x左右 又遇见了global,完全失去了IDE对代码的追踪功能 往别人对象上添加方法和属性的行为,在node后端绝对是大忌 发现有个似乎自己写的Promise模块,在删掉前搜索了一下整个项目,结果还真使用到了,多次使用了.when()方法,寡人也是第一次见啊,必需砍掉这个不标准的东西 post方法本身支持json,而用的时候却到处都是json数据里的一个json字符串,奇葩 没有任何单元测试 没有开发环境的数据库初始数据,导致部分功能完全没法在本地跑起来,所以一个项目应该要做到能在完全新环境下跑起来

今天的感悟: 1.项目还是要选择越简单的技术栈越好,这样新人可以在最短的时间接手,不要为了用某技术而用某技术,像这个项目中的docker和nginx完全是多余的 2.项目初始提交是18年却还在使用17年就已经淘汰的异步处理方法 3.一个项目最容易跑起来的一定要是开发环境,任何生产环境的配置都不能出现在版本库中

下一步要干掉全局变量,升级node版本以支持async/await,彻底拆分前后端

15 回复

“往别人对象上添加方法和属性的行为,在node后端绝对是大忌”,这个我不太了解,是害怕这个修改之后,后面创建这个对象的时候构造函数都要修改,还是什么的。。大佬可以说一下有什么坏处吗。。因为我这边写的后端,好像不太需要用到面向对象的写法…自己如果做到面向对象的时候避免一下这些错误。

去新公司报道了?

等更,授人以鱼不如授人以渔

$.when 是 jQuery 的, Promise 是在 $.Deferred 后面才出来的

Docker 保证了运行环境一致,虽然你没用到但确实是个好东西

nginx 在后面有多个站点或者要上 ssl 的时候很好用

@shynome 这个.when还真是自己写的Promise中的东西,由于没有文档,代码写得晦涩难懂,懒得去深入研究了,工作原理基本上就是传一个数组然后回调遍历它,在最后一个元素遍历完resolve后才会到下一个then,解决的问题就是每个元素都要做相似的异步处理然后才到下一步,完全是可以用原生的promise实现的 docker仅仅是一次性使用的,根本没有dockerfile,下午拿到了正式服务器的权限进去看了一下,发现服务器居然只有一个root用户,猜测以前的人可能不知道怎么配置服务器,为了图方便所以用了docker,但却给我造成了麻烦,因为以前的公司这些都是运维干,现在我还要兼职运维的工作了 目前没用到ssl,确实如你所说是多个站点,一个面向用户,另一个对内使用,对内使用url上加端口号就行了,没必要用nginx去做转发,我不喜欢搞这么复杂,必须砍掉

@cheerApril 1。破坏了封装性,假设你看到某模块一个函数的用法不清楚想去查文档,结果找半天找不到文档,最后发现是别人自己往上加的,你会不会很气愤 2。如果往上加的东西产生冲突,导致运行出问题,你需要花很多时间去找问题

往别人对象上添加方法和属性的行为,在node后端绝对是大忌

@zengming00 赞,但这个真正能体会到还需要写一段时间的代码才能体会。 docker其实本身就需要良好自动化构建环境才能对开发无感,但只有一台服务器,这些成本确实偏高了,nginx等有前置机后也可以再考虑,这方面楼主还是很务实的。 但本地应该不需要启动docker和启动nginx来开发吧?如果要这也太尴尬了,本地开发最好的方式还是一个npm钩子就能启动才是最好的。

@zy445566 本地开发完全用不到docker和nginx,所以我才要砍掉这玩意,昨天拿到了测试服和正式服务的权限,发现坑爹的是,外面一个nginx,docker里面又一个nginx,而且两个都在用,就是说,一个请求进来,要经过两层Nginx才到node去处理 还有更坑爹的,测试服和正式服居然是混用的

@zengming00 可以,挺挑战的。期待更新

我真是醉了

[root@xx server]# ls -l /usr/local/nodejs/node-v4.2.3-linux-x64/bin/node 
-rwxrwxr-x 1 500 500 34799826 May 16  2018 /usr/local/nodejs/node-v4.2.3-linux-x64/bin/node
[root@xx server]#  /usr/local/nodejs/node-v4.2.3-linux-x64/bin/node -v
v8.11.2

不知道为什么代码是一样的,服务器上是正常的,在我本机上跑这块内容加载不出来,浏览器控制台没报错,我不怎么写前端,搞不明白哪里的问题,用的是Vue.js v1.0.24 微信图片_20190418094126.png 微信图片_20190418094131.png 我还以为vue1.x能挂载到注释里呢,找了半天终于发现原来大佬用了nginx 的ssi功能,也就是< !–#include file=“menu-V.html”-- >,终于明白为什么要套上一层nginx了,终于敢砍掉这玩意了 今天上午已经砍掉了docker

@zengming00 这个方法相当于是替换掉了这个注释里面的内容,之前说通过工具下载静态页再diff应该可以看出来。

回到顶部