我的NodeJS一年之旅总结

这是《为什么我从Python转换到Node.js》这篇文章的后续。《为什么我从Python转换到Node.js》写于一年多前,主要是说因为我对Python感到失望于是打算尝试Node。

一年的内部CLI工具,客户项目和更新公司产品的历练,正是我所学到的东西。不仅是Node,JavaScript也很不错。

易于学习,但不可能完全掌握

Node很容易学习。特别是如果你已经懂得一些JavaScript知识的话。用Google搜索一些初学者教程,摆弄一下Express,然后你

就可以开始你的征程了。然后你会意识到你需要选择一个数据库。没问题,我们可以搜索NPM。哦,那里已经有不少优雅的SQL软件包了。之后你会发现所有的
ORM工具烂极了,而基本的驱动程序是你最好的选择。现在,你被困在了实施冗余模型和验证逻辑中。在那不久,你开始编写更复杂的查询,并开始迷失在
callbacks中。你终于冲出了callbacks地狱,并开始使用promises库。现在,你差不多可以“promise化”所有事情,并且美滋
滋地小酌一杯。

所有这些是想说明,Node生态系统感觉像总是在不断前进中。却不是用一种很好的途径。“胜过”旧工具的新工具似乎每天都在问世。总会有一个新的闪

亮的东西来替代另一个。你会惊讶于这种情况的发生有多么容易,你和社区看上去都在鼓励它。你使用Grunt!?每个人都使用Gulp!?不要等待,现在就
使用本地NPM脚本!

包括琐碎代码——即不超过10行代码——的软件包每天都数以千计地从NPM下载。说真的!?你需要用于数组类型检查的依赖关系?并且这些软件包被一些大型工具,例如React和Babel所用。

你永远不可能用一种极快的速度掌握一些东西,更不要说潜在的依赖关系的不稳定了。

处理错误时,祝你好运

以前使用其他语言如Python,Ruby或PHP的你,还在期望抛出和捕获错误,或甚至是从函数返回错误作为错误处理的简单的方法吗?Node可

不这样。相反,你需要四处传递错误在你的callbacks(或promises)中——对,不抛出异常。直到你了解的不仅仅是callbacks,并且

试图遵循堆栈跟踪,这才不起效用。更不必说,如果你忘了在错误上返回callbacks,那么它就会继续运行并触发另一错误设置,在你返回最初的错误设置
之后。你需要让你的客户多加一倍的钱以弥补用来调试的时间。

即使你设法想出了针对自己错误的坚实标准,你也不能确认(而不读取源)你安装的许多NPM软件包遵循相同的模式。

这些问题导致了“catchall”异常处理程序的使用,这样就会记录问题。请记住,Node是单线程的。如果有什么东西锁定了该进程,那么一切就会轰然倒下。但是使用Forever,Upstar和Monit很酷,不是吗?

callbacks,promises还是generators!?

为了处理callbacks地狱,错误处理和通常难以阅读的逻辑,越来越多的开发人员已经开始使用Promises。这基本上是编写看上去像同步码
但没有疯狂的callbacks逻辑的一种方式。不幸的是,没有任何“标准”(一切都像在Javascript中其他人)用来实施或使用
Promises。

现在最明显的库是Bluebird。它相当不错,速度快,又能刚好完成工作任务。不过,我发现不得不封装需求到Promise.promisifyAll()特别有黑客范。

在大多数情况下,我会使用优秀的async库,以避免callbacks。这感觉更自然。

最后,我对于Node的经验是,Generators变得越来越流行。我并没有深入了解Generators,因此无法给出太多的反馈。非常期待听到大家关于Generators的经验。

糟糕的标准

最后一件令我沮丧的事情是缺乏标准。每个人对上述个要点该如何处理似乎都有自己的看法。Callbacks?Promises?错误处理?构建脚本?无穷无尽。

那也只是抓住了表明的东西而已。似乎彼此之间也不同意如何编写标准的JavaScript代码。不妨快速Google检索“JavaScript编码标准”,你就会明白我的意思。

我意识到很多语言都没有严格的结构,但它们通常却都具有由语言的实际维护人员创建的标准指南。

我认为只有一个确实有助于JavaScript,它是由Mozilla编写的。

关于Node的最后一些想法

我花了一年时间试图使用Javascript以及更特别的Node为我们的团队工作。但是不幸的是,在此期间,我们的时间更多的是花在了攻读文档,提出标准,讨论库还有调试琐碎的代码上。

那么我会推荐它用于大规模的产品吗?绝对不会。其他人有没有试着这样做呢?当然有过。我也尝试过。

但是,我建议JavaScript用于前端开发,例如Angular和React(或者你也可以有其他选择)。

此外,我认为Node适合简单的后端服务器,并且服务器主要用于webSockets或API
 ray。这使用Express很容易快速完成,并且我们正是用在了我们的Quoterobot
PDF处理服务器上。这是一个单独的文件,包含186行代码,其中还包括了空格和注释。Node用得真心顺手。

回归Python

你可能会想,现在的我在干什么呢?好吧,我依然在使用Python编写web产品和API的主要部分。主要在Flask或Django中,使用Postgres或MongoDB。

它经受住了时间的考验,有一些伟大的标准和库,它易于调试并且表现良好。当然它也有它的缺点。但世上没有完美的东西。出于某种原因,Node抓住了我的眼球,让我深陷其中。我不后悔曾拥抱过它,但我确实觉得我本不应该花费这么多的时间在它上面。

我希望JavaScript和Node将来能够得到改善。我很乐意重新审视它。

请告诉我你的经验?你有没有遇到我这样类似的问题?你是否最终还是决定转换回到更舒适的那种语言?

作者:小峰

来源:51CTO

时间: 2024-12-21 19:58:31

我的NodeJS一年之旅总结的相关文章

学习NodeJS第四天:初始化nodejs的历险之旅(上)

初始化nodejs的历险之旅(上) nodejs 其源码大体上分  C/C++ 的和 JS 的.C/C++ 文件如下图所示:JS 文件主要集中在 /lib 目录里面,但别处 /src 中却有一个非常重要的 node.js(process.js) 文件,它是初始化 nodejs 的文件,在调试的时候也会经常断点在该源码上.本文基于 nodejs 0.2.0 的版本来围绕这份初始化文件谈谈对 nodejs 的认识.若不足之处,敬请提出! nodejs的全局对象 相对于某些代码依赖于访问特定的包才能够

学习NodeJS第四天:初始化nodejs的历险之旅(下)

包加载 首先声明,原本 JS  是没有模块库机制(module)的,这必然为创建实质项目带来很大的麻烦,毕竟,我们的目标,还是要创造一个系统的.科学现代的.规范合理的控制各逻辑代码的边界,否则如果是一种落后的管理机制那就是一块明显的短板.nodejs 本身没有发明一种"新的"模块管理方式,而是直接继承自志愿者组织的 CommonJS 规范作为模块管理的规范,所以开发 nodejs 的开发者都应遵守该规范.Nodejs 本身就有几个已编译到进程之中的模块. 用法简介 要使用这些定义好的模

本站索引帖

 **** Ext JS 3中文文档离线版下载 **** ExtJS4 專題 Ext概述系列 Ext 4 概述(一) Ext 4 概述(二)之Ext Core Ext 4 概述(三)之Env命名空间 & 语言增强包 & Ext.Function Ext 4 概述(四)之 ARIA.Data.Draw.Fx Ext 4 概述(五)之布局Layout.组件Component.Form Ext 4 概述(六)之Grid Ext 4 概述(七)之面板Panel & 杂项 个人整理资料 预览

nodejs开发微博实例

  本文给大家分享的是使用node.js实现开发微博的实例,主要是看了nodejs开发指南之后发现书上的代码很多已经不能用了,原因是express版本升级了,所以今天就尝试着吧开发微博的实例也升下级,推荐给大家. 之前一直执着于前端开发,最近几天,开始学起了nodejs.作为一名前端开发者,见到这样一门用javascript写的后台自然是很激动的.但是,后台毕竟不同于前端,在学习的过程中,还是会遇到不少问题. 为了开始学习nodejs,一开始选择了<深入浅出nodejs>这本书,看了几章之后,

使用nodejs开发cli项目实例

  这篇文章主要介绍了使用nodejs开发cli项目实例,本文讲解使用generator-cli-starter实现cli项目的开发,需要的朋友可以参考下 1.分分钟使用默认选项安装完nodejs 2.分分钟使用sudo npm install -g yo安装完yeoman 3.通过sudo npm install -g generator-cli-starter安装cli开发脚手架 OK, 现在我们可以使用yo cli-starter命令开始我们cli开发之旅了 创建cli项目 代码如下: y

一个初级码农的测试之旅(一)——初识单元测试

前言 首先说一下我自己--一个码农,准确的讲我是一名在中国最大互联网公司搬砖的初级码农.我不是计算机科班出身,一年前进入公司的时候,从未接触过web开发,没有完整的学习过数据库知识,写不出一条完整的sql语句,甚至不知道js和css到底是怎么控制页面行为和样式的--这样的人为什么可以通过面试?反正不是因为我长得帅. 背景知识 文章最初,先介绍一下我们团队的产品--阿里云持续交付平台(crp.aliyun.com),是一个旨在服务阿里云上众多开发者的持续交付平台(你可能还没听说过,但不妨一试哦),

使用nodejs开发cli项目实例_node.js

1.分分钟使用默认选项安装完nodejs 2.分分钟使用sudo npm install -g yo安装完yeoman 3.通过sudo npm install -g generator-cli-starter安装cli开发脚手架 OK, 现在我们可以使用yo cli-starter命令开始我们cli开发之旅了 创建cli项目 复制代码 代码如下: yo cli-starter 按照提示输入项目名称.命令名称,完成cli项目创建.后续的教程中我们将使用hi作为你的命令名称,如果你使用了其他命令名

nodejs教程之入门_node.js

前言 再不学nodeJs,我们就老了......在HTML5大浪袭来的时候,很多先辈就开始了NodeJs之旅,而那时我还在做服务器端的程序 后来转成前端,和梯队的距离已经很大了,因为我会服务器端语言,还干了很久,所以至今才开始学习NodeJs,向完整的前端前进 这次学习NodeJs的计划是: ① 1-2周学习基础知识 ② 1周左右开发一个简单项目 ③ 利用NodeJs开发一套用于移动端调试的工具 ④ 打包相关(这个可能比较远了) NodeJs特点 ① 异步 从文件读取到网络请求,NodeJs皆以

nodejs开发微博实例_node.js

之前一直执着于前端开发,最近几天,开始学起了nodejs.作为一名前端开发者,见到这样一门用javascript写的后台自然是很激动的.但是,后台毕竟不同于前端,在学习的过程中,还是会遇到不少问题. 为了开始学习nodejs,一开始选择了<深入浅出nodejs>这本书,看了几章之后,得出一个结论是:真是一本好书,但是还是不会写nodejs!然后选择了另外一本教材<nodejs开发指南>,由于看过了<深入浅出nodejs>,直接跳过了这本书的前几章,写起了该书第五章的微博