前端周榜专注于前端领域的内容,主要是外文资料的收集,帮助开发者了解前端本周热点;分为新闻热点、开发教程、工程实践、深度阅读、开源项目、巅峰人生等栏目。欢迎关注【前端之巅】微信公众号(ID:frontshow),及时获取前端周榜;本文是半年来发布的前端周榜中Node.js相关教程实践和开源项目的盘点,可以查看往期榜单或其他盘点文章。教程实践掌握Node.js核心模块文件系统:本文介绍了Node.js核心模块中与文件系统和文件流相关的部分,同时也介绍了实际开发中常用的第三方文件库.本文首先介绍基本的读写操作,然后介绍权限控制、监控等功能,最后讨论使用graceful-fs、mock-fs、lockFile等优秀的第三方库辅助开发。(https://parg.co/bMj)《关于Node.js存在反序列化远程代码执行漏洞的安全公告》:近日,??国家信息安全漏洞共享平台(CNVD)收录了Node.js反序列化远程代码执行漏洞(CNVD-2017-01206,对应CVE-2017-594).攻击者利用该漏洞远程执行操作系统命令,获取服务器权限。由于目前的验证码已经公开,极有可能诱发大规模的网站攻击。Node.js反序列化模块的node-serialize库中的unserialize()函数没有经过安全处理。该漏洞通过传递调用JavaScriptIIFE函数表达式,达到远程任意代码执行的效果。攻击者可以通过远程攻击获取当前服务器运行环境的权限。在实际部署中,node.js运行环境大多具有操作系统的root权限,因此可以完全控制服务器主机。CNVD对该漏洞的综合评级为“高危”。目前,相关利用方式已在互联网公开,近期可能会爆发攻击企图。不过按照原作者的说法,其实这个库在GitHub上只有20颗星,其中有好几颗是在漏洞文章发布后才被吸引过来的,下载量很小。要想避免此类安全问题,就需要解决它,保证用户输入的安全。通过安全传输方式(内网&加密)传输序列化字符串,使用RSA等签名算法对字符串进行完整性校验等方法。《一次一个微优化,改进Node.js应用的吞吐量》:本文是介绍几个提高Node.js应用吞吐量的小优化技巧,包括尽可能使用聚合IO操作,通过批量写入最小化系统调用次数,以及承担发布成本考虑到。在内部,清除应用程序中的不同定时器,CPUprofiler可以给你一些有用的信息,但它不能完全反馈整个过程,谨慎使用ECMAScript高级语法,特别是如果你没有使用过最新的JavaScript引擎或类似的到Babel使用这样的转换器时,深入了解依赖树的组成并对您使用的依赖项进行适当的分析。当我们要优化包含IO功能的应用程序的性能时,我们需要知道应用程序消耗的CPU周期以及阻碍应用程序并行执行的因素。本文旨在分享作者在ApacheCassandra项目中升级DataStaxNode.js驱动时的一些思考以及导致应用吞吐量下降的关键因素。《并发与并行:理解 Node.js 中 IO 底层机制》:本系列希望帮助开发者深入了解开发并发应用程序的相关知识,而本文重点介绍操作系统级调度和应用程序IO等相对基础的知识。《Node.js 社区的发展之道:质量与速度并重》:Node.js社区的核心目标之一是在快速迭代的同时保证代码质量。新发布的版本必须保持与之前版本相同的稳定性,避免在生产环境中崩溃。Node.js社区不盲目妥协,而是不断突破自我,在保证变化速度的同时达到高质量的要求。文中是Node.js社区对其发布版本、变更流程、自动化测试、性能测试等方面的介绍。《为何使用 Node.js ?》:本文来自Node.js技术专家TomislavCapan。本文首发于2013年,详细介绍了Node.js的内部原理,探讨了Node.js的适用业务场景和典型范式。(http://suo.im/3sFwvm)《你应该知道的关于 Node.js 中模块导入的知识》:在Node.js的开发中,我们总是在和它的模块机制打交道,而本文作者介绍了Node.js中负责处理模块的两个核心以一种简单的方式依赖。模块:要求和模块;并介绍了Node.js中不同导入对象的实际递归处理流程以及最终在模块中形成的元数据描述。(https://parg.co/bQl)《Node.js 应用监控实践指南》:本文介绍生产环境下Node.js应用监控实用指南,包括监控的含义、监控对象、目前开源的监控方案和部分SaaS方案,ETC。。(https://parg.co/bhb)《使用 Faker.js 为 Node.js 应用创建模拟数据》:在应用程序开发中,我们常常很头疼如何构造大量的随机数据,尤其是那些满足某些固定模式的数据,而我们可能会用到这些数据模仿RESTful接口、单元测试等。而Faker.js为我们提供了这样一个随机数据生成器。(https://parg.co/bhU)《Node.js 运行时介绍》:这篇文章很好地介绍了Node.js,包括Node.js中的常用概念知识、JavaScript并发模型和基于EventLoop的实现、Node内置的对象。js,为什么Node.js被命名为Node.js,等等。(https://parg.co/b4I)《TypeScript 在 Slack 的实践分享》:维护大型跨平台JavaScript代码库是一项非常具有挑战性的工作,无论是将对象从Chrome的JavaScript传递到Objective-C,还是简单地从Node.js中的回调接收结果,需要保证不同代码对通信对象的期望是一致的。本文是Slack在跨平台、多终端应用开发中使用TypeScript对类型进行约束的实战经验分享,避免意外的类型不一致导致的崩溃。(https://parg.co/bRR)《Node.js 中 Object Streams 的终极指南》:Node.js中的Streams为我们提供了强大的功能,使我们能够异步处理输入和输出,或者在多个独立步骤中转换数据。本文首先回顾了流相关的理论,然后介绍了如何像Gulp一样进行对象流转换操作。(https://parg.co/bfV)《在 Node.js 应用中如何使用 ESLint》:ESLint是一个开源的JavaScriptLinting工具,可以帮助开发人员解决JavaScript无类型语言本身带来的一些错误。ESLint遵循组件化的设计思想,允许开发者动态设置使用规则,而本文是一篇介绍ESLint基本环境搭建和使用方法的文章。(https://parg.co/bN4)《8 小时内学习 Node.js》:Node.js是一个基于GoogleChromeV8引擎的JavaScript框架,可用于开发视频直播、单页应用等IO密集型Web项目.本文提供了从零到一的完整Node.js学习路线图,包括基础环境搭建、Console使用、核心模块使用、基础Web服务器搭建等。(https://parg.co/bNy)《掌握 Node.js 核心模块之文件系统》:这篇文章介绍了Node.js核心模块中与文件系统和文件流相关的部分,同时也介绍了实际开发中常用的第三方文件库。本文首先介绍基本的读写操作,然后介绍权限控制、监控等功能,最后讨论使用graceful-fs、mock-fs、lockFile等优秀的第三方库辅助开发。(https://parg.co/bMj)《使用 Electrino 减少近 99% 的应用大小》:Electro是一个非常好的使用Web技术开发跨平台桌面应用程序的运行时,但它的缺点是打包后的应用程序往往需要携带完整的Node.js和Chromium框架,即使是最简单的HelloWorld应用程序也需要将近115MB。Electrino提供了一个类似于Electron的接口,但是使用系统自带的webruntime来替代Chromium,使得最终打包后的应用只有原来的0.1%大小。Electrino适用于不依赖于操作系统本身功能的应用程序,该项目也在开发中。(https://parg.co/bM2)《调试 Node.js 应用的最佳工具》:调试,即在软件中发现并修复问题的过程,一直是Node.js项目建设中的挑战之一,本文介绍如何使用那些优秀的工具来帮助调试Node.js代码。本文首先介绍日志相关内容。适当的日志可以帮助开发者快速定位生产环境中的错误;那么本文介绍如何在开发环境中直接调试Node.js应用。(https://parg.co/bMB)《Node.js 根本没有 float:浮点反序列化错误背后的故事》:在Node.js中,当我们序列化和反序列化一个浮点数时,出现了错误。为什么?笔者查了下才发现Node.js根本就没有float!(https://parg.co/bMX)《编写安全的 Node.js 代码》:本文是对DannyGrander演讲的总结。他首先回顾了如何破解易受攻击的Node.js应用程序,并深入解释了几个流行的npm包存在的安全威胁;最后,作者给出了修复这些漏洞的建议,以保证未来应用开发中Node.js代码的安全。(https://parg.co/bVL)《需要掌握的 Node.js Streams 相关知识》:Node.js流一直被批评难以理解和使用。近年来,许多开发人员创建了包库以方便使用Node.js流;然而,本文追根溯源,重点介绍Node.jsStreams的基本语法并澄清常见的误解。本文首先以一个使用Stream读取文件的简单例子介绍了Stream的概念,然后介绍了Node.js中的四种流及其具体实现方法。(https://parg.co/bJN)《N-API:下一代编写 Node.js 原生模块的接口》:Node.js拥有一个非常庞大且生机勃勃的模块生态系统,这也是它活力与魅力的源泉。但是现在很多用C/C++编写的原生模块直接依赖于V8或者NAN接口,导致其稳定性不够,需要随着Node.js版本的变化不断的改变或者重新编译。N-API致力于解决这个问题,文中介绍了N-API的基本语法和现状。(https://parg.co/bip)《Yarn 与 npm5 比较》:npm5.0.0随Node.js8.0.0发布,不仅性能大幅提升,还引入了类似yarn.lock-lock.json文件的包来实现所谓的确定性包管理。本文介绍了所谓确定性包管理的具体含义,并比较了yarn和npm5的不同实现方式和优缺点。(https://parg.co/bir)《JavaScript 模块现状》:最近随着各大浏览器开始支持ESM(ECMAScriptModuls),Node.js也计划引入*.mjs作为ESM的文件扩展名。关于JavaScript模块化的未来发展也引发??了社区的热烈讨论。本文首先介绍ESM在浏览器、Webpack等组件工具和Node.js中的未来实现,然后讨论个人对ESM未来发展以及对程序开发本身的潜在影响。(https://parg.co/bi0)《Node.js 8 中 util.promisify 介绍》:Node.js8为我们提供了一个新的实用函数util.promisify(),它可以将一个基于回调的函数封装成一个基于Promise的函数。本文介绍了util.promisify()的基本使用。首先介绍文件读写相关接口的封装和使用,然后讨论如何引入async语法,最后介绍自定义promisify函数的使用。《你应该掌握的关于 Node.js 子进程的知识》:Node.js原本以单进程、单线程、非阻塞的方式提供了强大的性能,但是在现在的多核时代,仅仅使用单进程已经远远无法承受日益增长的应用压力。本文介绍了Node.js中spawn()、exec()、execFile()、fork()等多进程相关模块的使用方法以及各自的特点。process,使用exec执行子命令,使用fork创建子进程有自己的通信通道等。(https://parg.co/bLq)16行代码构建基于Node.js的天气应用:这篇文章是通俗易懂的Node.js入门实践。作者使用Node.js从OpenWeatherMap中抓取开放数据并打印在控制台中。本文将依次介绍如何注册获取OpenWeatherMap的ApiKey、如何使用npm初始化项目、如何使用request抓取数据、如何优化命令行交互显示等等。(https://parg.co/byY)基于Prometheus的Node.js应用性能监控:本文致力于帮助现有生产环境下的Node.js应用开发者了解如何使用开源应用Prometheus构建监控平台;Prometheus是我们为时序数据提供强大的数据压缩和快速查询功能。本文首先探讨了Node.js应用监控的设计理念和指标,然后比较了目前几种监控方案的优缺点。最后介绍了如何在项目中引入Prometheus以及集成Kubernetes、Grafana等第三方插件;有关Node.js的更多信息,请参阅https://parg.co/be0。(https://parg.co/bed)扩展Node.js应用:Node.js设计的初衷之一就是保证其可扩展性。本文详细介绍了开发者应该了解的关于扩展Node.js应用程序内置工具的知识。本文首先介绍了复制、分解、分段等常见的设计思想,然后讨论了如何使用Node.js内置的Cluster模块来保证应用程序的可扩展性,以及如何提供零宕机重启特性。Node.jsPracticalSecondEdition:本仓库是AzatMardan的书PracticalNode.jsSecondEdition的开源发布地址。它包含十二章和相关的演示代码。非常值得一读。书中介绍了Node.js环境搭建与Express.js初步探索、基于Mocha的单元测试、模板引擎、数据持久化与性能优化、项目调试、部署与发布等章节;更多Node.js相关信息,请参考https://parg.co/be0。使用ApolloServer快速开发基于Node.js的GraphQL服务器:ApolloServer是由社区维护的开源GraphQL服务器,支持目前主流的Node.jsHTTP服务器框架:Express、Connect、Hapi、Koa、AWSLambda、Restify和Micro。本文首先介绍了ApolloServer遵循开放、简洁、高性能的原则,然后介绍了基于Express的基本使用和性能监控;更多GraphQL相关信息,请参考https://parg.co/b1e。swagger-decorator:swagger-decorator是JavaScript和Node.js应用程序中实体类和方法的注解库,旨在在一个地方注解多种用途。可用于实体类生成验证、SequelizeORM实体类生成以及面向Koa的Routing注解和Swagger文档自动生成场景。基于Node.js和HTML5的视频流:本文逐步介绍如何构建基本的Node.js接口并添加路由以将视频文件发送到前端。本文首先介绍Node.js中流的基本概念和基本API,例如如何获取文件大小、从文件创建流以及获取块大小。然后介绍如何搭建服务器并添加合适的路由返回视频流。最后介绍前端如何使用HTML5video标签实现视频播放和控制;更多Node.js相关信息,请参考https://parg.co/be0。Node.js微服务实践:微服务架构目前很流行,但是笔者发现由于很多人都有自己独到的见解,微服务架构的多样性和复杂性不断增加;笔者希望通过本文,初学者能够快速使用Node.js。.js来开发简单的微服务。本文首先介绍了微服务出现的背景和微服务的五项原则:零配置、高冗余、容错、自愈、自动发现;服务集群,依次创建Requester、Responder等基础组件,最终实现系统中相互依赖的几个模块。有关Node.js的更多信息,请参阅https://parg.co/be0。Node.js实战教程:本教程希望结合一些比较知名的模块/功能,讲解实现过程中的各个知识点。主要分为控制流、Web、存储等几个部分。目前完成的模块包括async介绍、Promise实现、coroutine实现、co模块介绍、HTTPClient实现、HTTPServer实现等,更多Node.js相关信息请参考https://parg.co/be0。Node.js如何解析表单上传?:NPM和GitHub中的开源组件帮我们解决了很多繁琐的工作,也让我们失去了很多深入技术细节的机会。当现有的组件不能满足我们的需求时,我们需要自己动手。前段时间笔者遇到一次手动解析表单上传的机会,也借此机会为大家分析一下Node.js解析表单上传的实现细节。有关Node.js的更多信息,请参阅https://parg.co/be0。使用Node.js搭建API网关:随着现代业务复杂度的增加,微服务的理念被越来越多的实践;APIGateway作为微服务架构的重要组成部分,可以提供一个统一的授权验证抽象层来兼容客户端协议。本文首先介绍了微服务的基础架构和APIGateway的概念,然后为前端团队介绍了Node.jsAPIGateway的组成;然后详细分析了APIGateway的基本功能需求:路由和版本、迭代设计、权限验证、数据聚合、数据序列化和反序列化、限流和缓存等。最后讨论了基于Express的APIGateway的实现。有关Node.js的更多信息,请参阅此处。使用std/esm在Node.js开发中使用ESModules:随着主流浏览器逐渐开始支持ESModules标准,Node.js对ESM支持的实现也越来越受到重视;Node.js计划在2020年的9.x版本中引入内置的ESM支持。最近正式发布的@std/esm为我们提供了Node.js中CommonJS和ESModules的高性能调用,可以工作在Node.js4.x及以上版本;可以顺利集成到现有的Webpack和Babel环境中,支持不同的模块使用不同的依赖版本。不同于目前需要发布编译好的CommonJS格式文件的解决方案,@std/esm能够以最小的成本转换源码,按需转换,动态缓存。有关Node.js的更多信息,请参阅此处。你看到的Node.js权限验证指南可能有错误:权限验证几乎是每个服务器应用的标准配置。本文作者在搜索Node.js/Express.js相关的权限验证教程时发现大部分都或多或少有问题,特整理此文以提醒其他开发者。常见的误解可能包括凭证的存储方式、密码重置策略、APIToken的生成和验证、限流等;更多Node.js相关信息,请参考这里。开源项目《pkg》:pkg可以将一个Node.js项目打包成一个单一的可执行文件,让开发者可以发布商业级的应用,不用担心源代码泄露的风险。pkg会自动扫描你的node_modules,然后将本地需要使用的内容打包成可执行文件。(https://github.com/zeit/pkg)doppio:doppio是基于TypeScript0.5.0编写的Java虚拟机(JVM),支持Node.js6.0及以上版本,内置Java8JDK环境;doppio是一次打破浏览器语言障碍的有趣尝试,你可以通过浏览它的源代码来学习如何编写Java虚拟机。notifme-sdk:notifme-sdk是一个用来简化通知发送流程的Node.js库,可以让我们灵活的集成email、SMS、push、WebPush等不同渠道来发送通知;notifme-sdk还允许我们自由注册服务Provider,内置的Fallback和轮询机制也可以进行简单的容错,notifme-sdk也提供了一个简单的UI控制台,方便我们只做界面监控。《使用 create-graphql-server 快速搭建 GraphQL 服务器》:本文介绍如何通过几个简单的命令快速搭建一个GraphQL服务器,它使用Node.js作为应用后端,Mongodb作为数据存储。(https://parg.co/bfQ)《Caporal.js》:一个用于创建Node.js命令行工具的全功能框架,包括帮助信息生成、自动完成等。(https://github.com/mattallty/...)延伸阅读Node.js学习与实践数据索引深入浅出Node.js全栈架构前端周榜React与ReactNative半年盘点
