瞎扯淡 用 Node.js 做一个项目的后端,后悔了

wushexu · 2019年07月13日 · 最后由 zhennann 回复于 2019年12月30日 · 9853 次阅读

本人近一年都在撸一个创业项目,近日终于上线了。

这是一个 英语阅读 的项目,工作量巨大,个中甘苦自不待言。

要说过程中有什么遗憾或者后悔的,就是后端采用了 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 比较爽,毕竟初衷是一个让人快乐的语言。

没有 iOS 的吗

tmr 回复

没有。有微信版

wushexu 回复

关注了👍

Rails、ActiveRecord 的很多特性,其他语言不是想模仿就能模仿的,尤其是 Node.js,因为他们缺少 Ruby 那种丰富的动态性。

还用过一个框架叫 sails,用起来也非常难受,尤其是它的 model 层。

greatghoul 回复

node 的 web 框架太多,让人眼花缭乱,始终没有杀手级的。上面说得对,根源在于动态性,而 model 层是对动态性要求最高的。

曾经听过一个分享,在一个用 koa 做后端的网站上实现 I18n……那时候我就震惊 node.js 生态需要从这么原始的地方写起。类比 Ruby 就是从 Rack 开始实现自己需要的 Rails 功能。

Rei 回复

koa 是非常小的框架,只负责管理 middleware,连 routing 都没有。相对来说 express 要完整一些,不过没有 model 层,没有 CoC,没有 generator。

wushexu 回复

真有不少人信了它官网 “next generation web framework for node.js” 的标语,GitHub README 倒是写 “middleware framework for node.js to make web applications”。

Rack 就是 “middleware framework for Ruby to make web applications”

fastify 推荐下这个 nodejs 框架,比如说做个中间层或应用接口层。比较重的项目建议还是 Rails. 用了 nodejs 后会发现蛮多都得自己造轮子或者拿来的轮子相对没有 ruby 生态这么完善,使用体验上没有 Rails 这么爽。

Rei 回复

我最近录制 Node.js 教程里面写的

因为要发布视频出去的,所以我已经说的非常客气了。。。koa,什么鬼玩意嘛?一些国内站点文章要舔上天了。真的感觉只有国内在关注 koa,koa 连 generator 都是国人搞的。

Express generator 建项目,加上 Sequelize Cli 搞 ORM。有类似于 Rails 的开发体验,也可以命令生成 模型、迁移、seeds 等等,然后跑命令自动建表,填充数据,设置关联模型。但论完善性,和 Rails 还差得远。

nodejs 的应用库也有很多坑,很多应用包都没标准而且版本比较乱;

canonpd 回复

哈哈,实在看不出 koa 有什么好。async?我用 express 一直都是 async。据说 koa 封装了 request 和 response,而 express 直接暴露了 node.js 的 http 核心库的 request 和 response。暴露有什么不好?有什么必要封装。

whong 回复

node.js 有很多非常小的库,要搁别的语言都不好意思提交的。还是因为提交一个新包太容易了

和 Sinatra 比感觉如何?

ecnelises 回复

express 可以对标 sinatra

typeorm 也勉强可以当 Active Record 用 https://github.com/typeorm/typeorm

不太明白为啥 node 圈里 express 和 koa 这么受推崇,我记得当年学习后端的时候比来比去,觉得 hapi 最完善,所以毅然从 hapi 入手,现在想想,当时幸好没从 express 入手,要不然肯定学的七零八碎的。

能上 RubyChina 应该都不会傻到用其他语言去写后端,项目方指定语言的除外。

样式挺漂亮的

不得不说 ruby 的并发性能不如 node

jetspeed 回复

各方面性能都不如,但架不住用着爽。而且前期也没几个用户,考虑性能干啥呢😂

nodejs 异步这个很恶心

凡是可以用JavaScript来写的应用,最终都会用JavaScript来写 | Atwood定律

强烈建议看一下 CabloyJS 全栈,看看 NodeJS 全栈现在已经发展到哪一步了。 CabloyJS 的技术栈:Koa->Egg->EggBorn->Cabloy https://github.com/zhennann/cabloy/blob/master/README.zh-CN.md

我想问一下怎么用 js 做后端啊,最近老师留了一个 web 项目作业,我也想用 js 做一个英语学习的网站,如果您有空的话可以帮一下我么

可加我微信:yangjian2025,申请入群

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册