【译】Node.js最佳实践 -在2017年如何成为一名更好的Node.js开发者

标签: tuicool | 发表时间:2017-03-14 08:00 | 作者:
出处:http://itindex.net/admin/pagedetail

一年前,我发表的 在2016年如何成为一名更好的Node.js开发者获得了广泛的欢迎,因此今年我想延续去年的主题,讲讲在2017年,如何成为一名更好的Node.js开发者。

在这篇文章中,我们将回顾2017年Node.js的最佳实践,最热话题,我们需要关注什么,来提升自身能力。让我们开始吧!

使用 ES2015

去年,我们也建议大家 使用ES2015,和去年相比,今年有很大的改观。

当时,Node.js v4版本作为长期支持版本,仅支持57% ES2015的语法,经过了一年,Node.js v6版本作为长期支持版本,支持了99% ES2015的语法。

也就是说,如果你正在使用最新的长期支持版本的Node,你不需要添加任何的babel,也可以使用ES2015编辑整个项目。

关于更多的Node.js版本对ES2015支持的细节,我推荐大家去Node.js官网( http://node.green/)上查看。

使用 Promises

promise的概念早在八十年代就被提出,现在已经是大多数现代编程语言中简化编写的一部分。

假设如下场景,读取一个文件,把它转成JSON并输出文件名,如果用callback回调函数实现,代码如下:

fs.readFile('./package.json', 'utf-8', function (err, data) {  
  if (err) {
    return console.log(err)
  }

  try {
    JSON.parse(data)
  } catch (ex) {
    return console.log(ex)
  }
  console.log(data.name)
})

我们用Promises实现这个功能,可以提高代码的可读性:

fs.readFileAsync('./package.json').then(JSON.parse).then((data) => {  
  console.log(data.name)
})
.catch((e) => {
  console.error('error reading/parsing file', e)
})

当然,现如今使用 fs模块并没有一个返回值为Promise的 readFileAsyncAPI,为了让上述代码正常运行,你需要引入一个类似 promisifyAll的模块,给它运行的环境。

使用代码规范

当代码规范被称为代码规范时,就意味着,至少在公司范围内推行,所以,当你想要改变你的项目时,意味着从0开始,不需要为之前的人的代码而懊恼。

我们RisingStack使用了我们的代码规范 JavaScript Standard Style构建我们的项目。

使用代码规范,你不需要使用 .eslintrc, .jshintrc, 或 .jscsrc不需要加载其他文件到项目中。 如果你对代码规范没有思路,你可以参考 Standard rules here.

使用Docker

你可以把Docker镜像当成部署容器的工具。Docker就是部署软件运行环境的一个容器,它包含了你软件运行的大部分的基础环境:代码,运行时间,系统工具,系统程序库,任何你能想到需要安装的东西。

为什么应该使用 Docker?

  • 隔离了运行环境和项目代码

  • 作为一个安全工具,让你的代码更加安全

  • 轻量的Docker镜像

  • 稳定的部署

  • 通过Docker你可以在本地看到你软件的运行环境

你可以参照网站 official getting started tutorial完成你的第一个Docker,另外推荐 Kubernetes best practices作为补充。

监视你的程序

当你的Node进程出现故障时,第一个知道的人应当是开发者,而不是用户。

一个开源的解决方案 Prometheus可以帮助你解决进程崩溃的问题。 Prometheus是SoundCloud的一个开源工具箱,监听并提示进程崩溃问题。 唯一的缺点是你需要手动挂载在自己开发的域下。

如果你在寻找一个开箱即用的方案,可以关注我们开发的 Trace by RisingStack,也是一个不错的解决方案。

Trace能为我们做的

  • 警告

  • 记录收集项目的CPU数据

  • 分布式追踪,查找错误

  • 性能监测,

  • 保护你的npm包安全

进行后台日志管理

如果你用HTTP发送请求,只要接受停止,整个消息都会丢失。但是,如果逆选择一个持久的传输层,像一个消息队列一样传输消息,你就不会有这个困扰。

如果接收服务停止,消息传输还会继续,将会在稍后发出。如果服务没有挂掉,它会有一个提示, 服务器将会重试,因此没有数据会丢失。

一个例子: 假如你发送了几千封邮件,在每一封里,你都会写一些基础信息,像邮件地址,姓名,签名,这时后台就好像工人一样,整理出一样地址的几百封,一起发到同一个地址。

这样的好处是,你可以随时查看每一封的状态,没有邮件会被寄丢。如果你发现几百封邮件同时丢了,你可以进行后期操作,让他们使用同一队列。

你可以使用借鉴如下日志管理工具:

使用最新的稳定的Node.js版本

为了最好的开发体验,我们最推荐的版本是最新版本和最新稳定版本,在本文中,我们更推荐最新长期稳定版本。就是写这篇文章时的最新版本 6.9.2

为了更轻松的切换Node版本, 你可以使用 nvm。 你安装一次, 输入这两个命令:

nvm install 6.9.2  
nvm use 6.9.2

使用语义化的版本

在几个月前我们进行了一次关于 Node.js Developer Survey的分享, 我们呼吁并帮助大家认识并使用语义化的Node版本。

不幸的是,我发现只有71%的调查对象使用语义化的版本,在构建他们的项目。这个比例应当更高,我们的观点是,每个项目都应当使用版本控制。为什么这么说,当我们更新包的时候,如果没有版本控制,很容易把整个项目搞崩溃。

对你的项目和模块做版本控制是很关键的,你的用户必须知道,什么时候发布了新版本,他们需要做什么,来获取新版本。

这就是为什么图片中展示的,为什么这么多人使用语义化的版本控制,你需要在版本控制中包含如下信息 重点,监听,补丁

  • 重点当有不兼容的API更新时,需要通过版本控制兼容

  • 监听在不终止服务的情况下增加新的API

  • 补丁向下兼容,BUG修复

npm也用了版本管理来管理你项目的依赖,因此,当你发布模块的时候,一定要确认npm包是否有相应的更新。换个说法,如果不看,你也许会把其他系统弄崩溃。

维护应用的安全性

在2017年,保护你的用户信息安全将会是你构建项目的着重点。仅在2016年,就有 数百万用户被账户入侵,出现这个现象就是因为安全措施不到位。

作为Node.js安全的初学者, 你可以读我们的博客 Node.js Security Checklist, 包含如下观点:

  • 安全的 HTTP Header,

  • 强制保护,

  • Session管理,

  • 处理依赖关系,

  • 数据管理

当你理解了这些基础概念, 你可以在 Surviving Web Security with Node.js!留下你的观点

学习Serverless

Serverless是AWS Lambda提出的一个理念。从此以后,这种理念流行起来, 并且有了开放的讨论社区。

明年, serverless 将成为一个关于构建项目的专门的方向。如果你想更上一层楼,你需要从现在开始学习。

一个最流行的解决方案就是 Serverless Framework, 这是由 AWS Lambda部署的一个方案。

参加研讨会和见面会

参加研讨会和见面会是一个学习新趋势,开发技巧和最佳实践的好机会。当然也可以认识更多的人。

作为开始的第一步,我建议你参加并在 one of these events上演讲。

做一个公开的演讲很难,吸引到每一个人的注意力更是难上加难,而且这不是一个好的想法。我推荐去 speaking.io查看演讲的一些小技巧。

在2017年成为一名更好的Node.js开发者

2017年作为- Node.js发力的一年,我们希望大家从Node.js开发中收获更多

我们启动了一个新的项目叫做掌握Node.js,希望从这些方面加深大家对Node.js的理解

  • Node.js异步编程

  • 创建Express服务器

  • 创建Node数据库

  • 使用Node构建结构化,可扩展的APP

我想了解更多!

如果你对这篇文章有任何疑问,请在评论区留言。

扫码关注w3ctech微信公众号

相关 [node js 最佳实践] 推荐:

node js 断点调试

- - Web前端 - ITeye博客
大部分基于 Node.js 的应用都是运行在浏览器中的,. 例如强大的调试工具 node-inspector. node-inspector 是一个完全基于 Node.js 的开源在线调试工具,提供了强大的调试功能和友好. 的用户界面,它的使用方法十分简便. 首先,使用 npm install -g node-inspector 命令安装 node-inspector,然后在终.

什么是Node?

- We_Get - 博客园新闻频道
译者按:前不久Oreilly出了一本小册子“What is Node?”,扼要的讲解了Node的身世和所适用的场景,作者文笔轻松流畅、内容充实,是非常难得的学习资料.   译文全文:http://jayli.github.com/whatisnode/index.html.   作者:Brett McLaughlin ,原文:What is Node?.

Node入门

- - CSDN博客编程语言推荐文章
作者:  Manuel Kiessling. 翻译:  goddyzhao &  GrayZhang &  MondayChen. 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识. 本书绝不是一本“Hello World”的教程. 你正在阅读的已经是本书的最终版.

jQuery最佳实践

- andi - 阮一峰的网络日志
上周,我整理了《jQuery设计思想》. 那篇文章是一篇入门教程,从设计思想的角度,讲解"怎么使用jQuery". 今天的文章则是更进一步,讲解"如何用好jQuery". 我主要参考了Addy Osmani的PPT《提高jQuery性能的诀窍》(jQuery Proven Performance Tips And Tricks).

PHP最佳实践

- xiangqian - 阮一峰的网络日志
虽然名字叫《PHP最佳实践》,但是它主要谈的不是编程规则,而是PHP应用程序的合理架构. 它提供了一种逻辑和数据分离的架构模式,属于MVC模式的一种实践. 我觉得,这是很有参考价值的学习资料,类似的文章网上并不多,所以一边学习,一边就把它翻译了出来. 根据自己的理解,我总结了它的MVC模式的实现方式(详细解释见译文):.

MongoDB最佳实践

- - NoSQLFan
将 MongoDB加入到我们的服务支持列表中,是整个团队年初工作计划中的首要任务. 但我们感觉如果先添加一项对NoSQL存储的支持,而不是先升级已支持的关系型数据库,可能对用户不太好,毕竟目前的用户都使用关系型数据库. 所以我们决定将引入MongoDB这项工作放到升级MySQL和PostgreSQL之后来做.

浅析Hadoop Secondary NameNode,CheckPoint Node,Backup Node

- - CSDN博客云计算推荐文章
Hadoop SecondaryNameNode并不是Hadoop 第二个NameNode,它不提供NameNode服务,而仅仅是NameNode的一个工具. 这个工具帮助NameNode管理Metadata数据. NameNode的HDFS文件信息(即Metadata)记录在内存中,client的文件写操作直接修改内存中的Metadata,同时也会记录到硬盘的Edits文件,这是一个Log文件.

[译]什么是Node?

- blacktulip - Taobao UED Team
译者按:前不久Oreilly出了一本小册子“What is Node?”,扼要的讲解了Node的身世和所适用的场景,作者文笔轻松流畅、内容充实,是非常难得的学习资料. 译文全文:http://jayli.github.com/whatisnode/index.html. 作者:Brett McLaughlin ,原文:What is Node?.

文章: Grails最佳实践

- - InfoQ cn
我在IntelliGrape工作,这是一家专门使用Groovy & Grails进行开发的公司. 本文是我们Grails项目遵循的最佳实践的基本清单,收集自邮件列表、Stack Overflow、博文, 播客和 IntelliGrape的内部讨论. 它们分为控制器、服务、Domain、视图、TagLib、测试和其他.