这个开源项目,给你一个《Node.js 最佳实践》

Posted 开源最前线

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这个开源项目,给你一个《Node.js 最佳实践》相关的知识,希望对你有一定的参考价值。

程序员书库(ID:OpenSourceTop) 编译

链接:https://github.com/i0natan/nodebestpractices


Node.js是一个基于Chrome V8引擎的javascript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。Node.js的包管理器npm,是全球最大的开源库生态系统。



Hacker News 近日发布了2018年12月的招聘趋势榜,数据显示,Node.js 已成为最流行的后端 Web 技术;目前Node.js的应用场景和招聘市场都是极大的,很多公司都使用 Node.js,阿里、腾讯、百度和去哪儿等,还有青岛的海尔集团这样的传统名企等等。


最近,猿哥在GitHub上发现一本开源的在线书籍——Node.js最佳实践。里面是关于Node.js最佳实践中排名最高的内容的总结和分享,如果你正在学习Node.js,可能会对你有所帮助


这个开源项目,给你一个《Node.js 最佳实践》


当前,该项目中一共有50多个Node.js最佳实践、样式指南以及架构建议。已经在GitHub上获得 23147 个Star,1688 个Fork


这个开源项目,给你一个《Node.js 最佳实践》


这本开源书籍每天都有新的issue和PR被创建,你可以把它当成是一本实时更新的在线电子书,目录如下:



目前,这本书已经完结的有六章,每章里面又分为多个小节,下面就是关于【对于异步的错误处理,请使用Async-Await或者promise】这一小节的内容



一段解释


由于回调对于大多数的程序员来说不熟悉,被迫随处检测错误,让人不快的代码内嵌和难以理解的代码流程,它没有形成一定规模。promise的库,比如BlueBird,async,和Q封装了一种标准的代码风格, 它通过使用return和throw来控制程序流程。具体来说,它们支持最受欢迎的try-catch错误处理风格,这使得主流程代码从在每一个方法中处理错误的方式中解放出来。


代码示例 – 使用promise捕获错误


doWork()
 .then(doWork)
 .then(doOtherWork)
 .then((result) => doWork)
 .catch((error) => {throw error;})
 .then(verify);



代码示例 反模式 – 回调方式的错误处理


getData(someParameter, function(err, result){
    if(err != null)
      //做一些事情类似于调用给定的回调函数并传递错误
      getMoreData(a, function(err, result){
        if(err != null)
          //做一些事情类似于调用给定的回调函数并传递错误
          getMoreData(b, function(c)
            getMoreData(d, function(e)
              if(err != null)
                //你有什么想法? 
    });
});



博客引用: "我们使用promise有一个问题"

摘自博客pouchdb.com


……实际上, 回调会做一些更险恶的事情: 他们剥夺了我们的stack, 这是我们通常在编程语言中想当然的事情。编写没有堆栈的代码很像驾驶一辆没有刹车踏板的汽车: 你没有意识到你有多么需要它, 直到你伸手去找它, 而它不在那里。promise的全部目的是让我们回到我们在异步时丢失的语言基础: return,throw和stack。但你必须知道如何正确使用promise, 以便利用他们。



博客引用: "promise方法更加紧凑"

摘自博客gosquared.com


………promise的方法更紧凑, 更清晰, 写起来更快速。如果在任何ops中发生错误或异常,则由单个.catch()处理程序处理。有这个单一的地方来处理所有的错误意味着你不需要为每个阶段的工作写错误检查。



博客引用: "原生ES6支持promise,可以和generator一起使用"

摘自博客StrongLoop


….回调有一个糟糕的错误处理的报道。promise更好。将express内置的错误处理与promise结合起来, 大大降低了uncaught exception的几率。原生ES6支持promise, 通过编译器babel,它可以与generator,ES7提议的技术(比如async/await)一起使用。



博客引用: "所有那些您所习惯的常规的流量控制结构, 完全被打破"

摘自博客Benno’s


……关于基于异步、回调编程的最好的事情之一是, 基本上所有那些您习惯的常规流量控制结构, 完全被打破。然而, 我发现最易打破的是处理异常。Javascript提供了一个相当熟悉的try...catch结构来处理异常。异常的问题是, 它们提供了在一个调用堆栈上 short-cutting错误的很好的方法, 但最终由于不同堆栈上发生的错误导致完全无用…



写在最后


这本在线的Node.js实践书籍的整体结构基本如上所述,可以看出内容基本来源于一些高质量的博客文章,从项目主页来看,这本书创建的时间并不久,但已经获得22159个Star,由此可见其受欢迎程度,如果你正好在研究学习Node.js,不妨把它当成其中的一份学习资料。



●编号517,输入编号直达本文

●输入m获取到文章目录


以上是关于这个开源项目,给你一个《Node.js 最佳实践》的主要内容,如果未能解决你的问题,请参考以下文章

52合1Node.js 最佳实践大合集

使用 Node.js 构建网站的最佳实践

使用 Node.js 构建网站的最佳实践

typescript node.js express 路由分隔文件的最佳实践

使用 SQLite3 + Node.js 的最佳实践

开源书籍-Node.js实践