本人近一年都在撸一个创业项目,近日终于上线了。
这是一个 英语阅读 的项目,工作量巨大,个中甘苦自不待言。
要说过程中有什么遗憾或者后悔的,就是后端采用了 Node.js,后悔没用 Ruby。
当时选 Node.js 有一点原因是它不那么烧服务器,现在看来是想得多了。
大量的静态化、cache 使得这个问题微不足道。何况开发效率才是王道。
当时后端不想用那么重的框架,所以也没用什么框架,只用了 exprees。用个重的框架还不如 RoR 呢,反正多多少少都是学 RoR。
然而它实在是过于 simple,甚至于 naive 了,导致很多东西都得手撸。包括 REST、一些公共的 DAO 方法。cors、集中的 session 管理、file upload 也要自己实现或集成。
开发效率比 RoR 低多了,真是无限怀念 RoR 的 Active Record,REST API。
js 这样弱类型不适合稍大一些项目的开发。没有强制的 API 契约,IDE/jsLint 起不了作用(btw,TS 真香)。
大量的 async/await,错误处理要非常小心。简单的 try/catch 是不行的,哪有 rescue/ensure 省事呢。
我今天就吐槽一下。
用了 eggjs,一些常用的库,比如 cache,ruby 的库可能几千 commit,现在还活跃开发中,eggjs 的几个到二三十个,而且发布后基本就没有更新了。
开发起来还是 ruby 比较爽,毕竟初衷是一个让人快乐的语言。
Rails、ActiveRecord 的很多特性,其他语言不是想模仿就能模仿的,尤其是 Node.js,因为他们缺少 Ruby 那种丰富的动态性。
node 的 web 框架太多,让人眼花缭乱,始终没有杀手级的。上面说得对,根源在于动态性,而 model 层是对动态性要求最高的。
曾经听过一个分享,在一个用 koa 做后端的网站上实现 I18n……那时候我就震惊 node.js 生态需要从这么原始的地方写起。类比 Ruby 就是从 Rack 开始实现自己需要的 Rails 功能。
koa 是非常小的框架,只负责管理 middleware,连 routing 都没有。相对来说 express 要完整一些,不过没有 model 层,没有 CoC,没有 generator。
真有不少人信了它官网“next generation web framework for node.js”的标语,GitHub README 倒是写“middleware framework for node.js to make web applications”。
fastify 推荐下这个 nodejs 框架,比如说做个中间层或应用接口层。比较重的项目建议还是 Rails. 用了 nodejs 后会发现蛮多都得自己造轮子或者拿来的轮子相对没有 ruby 生态这么完善,使用体验上没有 Rails 这么爽。
我最近录制 Node.js 教程里面写的
因为要发布视频出去的,所以我已经说的非常客气了。。。koa,什么鬼玩意嘛?一些国内站点文章要舔上天了。真的感觉只有国内在关注 koa,koa 连 generator 都是国人搞的。
Express generator 建项目,加上 Sequelize Cli 搞 ORM。有类似于 Rails 的开发体验,也可以命令生成 模型、迁移、seeds 等等,然后跑命令自动建表,填充数据,设置关联模型。但论完善性,和 Rails 还差得远。
哈哈,实在看不出 koa 有什么好。async?我用 express 一直都是 async。据说 koa 封装了 request 和 response,而 express 直接暴露了 node.js 的 http 核心库的 request 和 response。暴露有什么不好?有什么必要封装。
不太明白为啥 node 圈里 express 和 koa 这么受推崇,我记得当年学习后端的时候比来比去,觉得 hapi 最完善,所以毅然从 hapi 入手,现在想想,当时幸好没从 express 入手,要不然肯定学的七零八碎的。
凡是可以用JavaScript来写的应用,最终都会用JavaScript来写 | Atwood定律
强烈建议看一下 CabloyJS 全栈,看看 NodeJS 全栈现在已经发展到哪一步了。 CabloyJS 的技术栈:Koa->Egg->EggBorn->Cabloy https://github.com/zhennann/cabloy/blob/master/README.zh-CN.md