Node.js指南,第1部分:常规信息和入门

我们将开始出版一系列材料,这些材料是针对初学者 Node.js 教程的分阶段翻译。 即,在这种情况下,“初学者”是对浏览器JavaScript有所了解的人。 他听说有一个服务器平台,其程序也用JS编写,并且希望掌握该平台。 也许即使您已经熟悉Node.js,也会在这里找到对自己有用的东西。

顺便说一句,去年我们在bash脚本方面有一个类似的项目 。 然后,在发布所有计划的材料之后,我们以PDF文件的形式收集了它们。 也计划这次做。



今天,我们将讨论Node.js的功能,开始熟悉该平台的生态系统并编写服务器端“ Hello World”。


回顾Node.js


Node.js是在服务器上运行的开源跨平台JavaScript运行时。 自该平台于2009年发布以来,它已经变得非常流行,并且在Web开发领域中起着非常重要的作用。 如果您将GitHub上某个项目收集的星数视为受欢迎程度的指标,那么拥有50,​​000颗星的Node.js是一个非常非常受欢迎的项目。

Node.js平台基于Google的JavaScript V8引擎,该引擎在Google Chrome浏览器中使用。 该平台主要用于创建Web服务器,但范围不限于此。

考虑一下Node.js的主要功能。

▍速度


Node.js的主要吸引力之一是速度。 在Node.js中运行的JavaScript代码的速度是用C或Java这样的编译语言编写的代码的两倍,并且比Python或Ruby这样的解释性语言快几个数量级。 这样做的原因是该平台的非阻塞体系结构,具体结果取决于所使用的性能测试,但总的来说,Node.js是一个非常快速的平台。

▍简单


Node.js平台易于学习和使用。 实际上,它确实非常简单,与其他一些服务器平台相比,它尤其引人注目。

▍JavaScript


Node.js运行用JavaScript编写的代码。 这意味着数百万已经在其浏览器中使用JavaScript的前端开发人员可以用相同的编程语言编写服务器和客户端代码,而无需学习用于迁移到服务器开发的全新工具。

浏览器和服务器使用相同的语言概念。 此外,在Node.js中,您可以快速切换到在平台上实现的新ECMAScript标准的使用。 为此,您无需等到用户更新其浏览器,因为Node.js是开发人员完全控制的服务器环境。 因此,当您安装Node.js的支持版本时,新的语言功能将可用。

▍V8引擎


在其他解决方案中,Node.js的核心是Google的开源JavaScript引擎V8,该引擎在Google Chrome浏览器和其他浏览器中使用。 这意味着Node.js利用了数千名工程师的成就,这些工程师使JavaScript JavaScript运行时变得异常快速,并继续致力于改进V8。

▍异步


在传统的编程语言(C,Java,Python,PHP)中,默认情况下,所有指令都是阻塞的,除非开发人员明确负责代码的异步执行。 结果,例如,如果在这样的环境中发出网络请求以加载某些JSON代码,则发出请求的流的执行将被挂起,直到响应的接收和处理完成为止。

JavaScript使用单个线程,回调函数(回调)和事件驱动的开发方法,极大地简化了编写异步和非阻塞代码的过程。 每次我们需要执行繁重的操作时,我们都会传递适当的回调机制,该回调机制将在完成此操作后立即调用。 结果,为了使程序继续工作,没有必要等待这种操作的结果。

浏览器中也出现了类似的机制。 比如说,我们不能等待AJAX​​请求的完成,而不能响应用户的操作,例如单击按钮。 为了方便用户使用网页,必须同时实时进行所有操作,从网络下载数据以及处理按钮的单击。

如果您曾经创建按钮单击事件处理程序,那么您已经使用了异步编程技术。

异步机制允许单个Node.js服务器同时处理数千个连接,而无需向程序员加载用于管理流和组织并行代码执行的任务。 这样的事情通常是错误的根源。

Node.js为开发人员提供了非阻塞的基本输入输出机制,通常,Node.js框架中使用的库是使用非阻塞范例编写的。 这使得阻塞代码行为成为例外而不是规范。

当Node.js需要执行I / O操作(例如从网络下载数据,访问数据库或文件系统)而不是阻塞主线程等待此类操作的结果时,Node.js会开始执行并继续执行其他操作,直到直到收到此操作的结果。

▍图书馆


由于与名为npm的Node.js软件包管理器一起使用的简便性,Node.js生态系统正在蓬勃发展。 现在,在npm注册表中 ,有超过50万个开源软件包可供任何Node.js开发人员自由使用。
在检查了Node.js平台的一些主要功能之后,我们将对其进行实际测试。 让我们从安装开始。

安装Node.js


Node.js可以通过多种方式安装,我们现在将考虑。
因此,可以在此处找到所有主要平台的官方安装软件包。

还有另一种非常方便的安装Node.js的方法,即使用操作系统中提供的软件包管理器。 例如,macOS软件包管理器是该领域事实上的标准,称为Homebrew 。 如果它在您的系统上,则可以通过在命令行上运行以下命令来安装Node.js:

brew install node 

可以在此处找到其他操作系统(包括Linux和Windows)的软件包管理器的列表。

Node.js的流行版本管理器是nvm 。 使用此工具,您可以方便地在不同版本的Node.js之间切换,例如,可以使用它安装并尝试新版本的Node.js,然后在必要时返回到旧版本。 在需要在旧版本的Node.js上尝试一些代码的情况下,Nvm也很有用。

我建议初学者使用官方的Node.js安装程序。 对于macOS用户,我建议使用Homebrew安装Node.js。 现在您已经安装了Node.js,是时候编写“ Hello World”了。

第一个Node.js应用程序


Node.js的第一个应用程序最常见的示例是一个简单的Web服务器。 这是他的代码:

 const http = require('http') const hostname = '127.0.0.1' const port = 3000 const server = http.createServer((req, res) => { res.statusCode = 200 res.setHeader('Content-Type', 'text/plain') res.end('Hello World\n') }) server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`) }) 

为了运行此代码,请将其保存在server.js文件中,并在终端中执行以下命令:

 node server.js 

要检查服务器,请打开一些浏览器, http://127.0.0.1:3000在地址栏中输入http: http://127.0.0.1:3000 ,即成功启动后将在控制台中显示的服务器地址。 如果一切正常,“ Hello World”将显示在页面上。

让我们来看这个例子。

首先,请注意该代码包含http模块connect命令。

Node.js平台是一组出色的标准模块的所有者,其中包括开发完善的与网络合作的机制。

http对象的createServer()方法创建一个新的HTTP服务器并返回它。

服务器配置为侦听给定主机上的特定端口。 服务器准备好后,将调用相应的回调,通知我们服务器正在工作。

服务器收到请求后,将引发request事件,该事件提供两个对象。 第一个是请求( reqhttp.IncomingMessage对象),第二个是响应( reshttp.ServerResponse对象)。 它们是最重要的HTTP请求处理机制。

第一个提供有关请求的信息,供我们使用。 在我们的简单示例中,我们不使用此数据,但是,如有必要,使用req对象,您可以访问请求标头和其中传输的数据。

第二个需要形成并发送对请求的响应。

在这种情况下,我们形成对请求的响应如下。 首先,将statusCode属性设置为200 ,指示操作成功:

 res.statusCode = 200 

接下来,我们设置Content-Type标头:

 res.setHeader('Content-Type', 'text/plain') 

之后,我们通过将响应的内容作为参数添加到end()方法来完成响应的准备:

 res.end('Hello World\n') 

我们已经说过,围绕Node.js平台已经形成了强大的生态系统。 现在,我们将讨论一些流行的Node.js框架和辅助工具。

Node.js的框架和帮助工具


Node.js是一个低级平台。 为了简化它的开发并使程序员的生活更轻松,创建了大量的库。 随着时间的流逝,其中一些变得非常流行。 这是我认为制作精良且值得探索的图书馆的简短列表:

  • 快车 该库为开发人员提供了一个非常简单但功能强大的工具,用于创建Web服务器。 Express成功的关键在于采用简约的方法,并专注于基本服务器机制,而不会试图对“唯一正确的”服务器体系结构强加一定的视野。
  • 流星 这是一个功能强大的全栈框架,实现了同构方法来开发JavaScript应用程序以及在客户端和服务器上使用代码。 流星曾经是一个独立的工具,其中包括开发人员可能需要的一切。 现在,它还与ReactVueAngular等前端库集成在一起。 除了开发常规的Web应用程序外,Me​​teor还可以用于移动开发。
  • 柯阿 该Web框架是由使用Express的同一团队创建的。 在开发过程中,它基于Express的多年工作经验,着重解决方案的简单性和紧凑性。 该项目似乎是对Express进行重大更改的解决方案,该更改与可能会使社区分裂的其他框架机制不兼容。
  • Next.js。 该框架旨在组织React应用程序的服务器端渲染。
  • 。 这是用于创建异步HTTP微服务的非常紧凑的库。
  • Socket.io 。 这是用于开发实时网络应用程序的库。

实际上,在Node.js生态系统中,您可以找到一个辅助库来解决几乎所有任务。 如您所知,建立这样的生态系统需要很多时间。 Node.js平台于2009年问世。 在其存在期间,发生了很多事情,对于想要学习该平台的程序员来说是值得了解的。

Node.js的简要历史


Node.js今年9岁。 如果将这个年龄与JavaScript的年龄(已经23岁)或25岁的Web年龄(以我们知道的形式存在)进行比较(如果您从Mosaic浏览器的外观中算出的话),那么这当然不是很多。

9年对于技术来说是一个短暂的时期,但是现在看来Node.js平台一直存在。

我从平台的早期版本开始工作,当时她只有2岁。 即使到那时,尽管事实上没有关于Node.js的太多信息,但人们可能已经感觉到Node.js非常认真。

现在,让我们讨论作为Node.js基础的技术,并简要考虑与该平台相关的主要事件。

因此,JavaScript是一种在Netscape中创建的编程语言,它是一种脚本语言,旨在管理Netscape Navigator浏览器中的网页。

Netscape的业务之一是销售Web服务器,其中包括一个称为Netscape LiveWire的环境。 它允许您使用服务器端JavaScript创建动态网页。 如您所见,使用JS进行服务器开发的想法比Node.js悠久得多。 这个想法几乎和JavaScript本身一样古老,但是服务器端JS在当时还没有普及。

Node.js平台如此广泛和流行的关键因素之一是它的出现时间。 因此,在此之前的几年,JavaScript开始被认为是一种严肃的语言。 这要归功于Web 2.0应用程序,例如Google Maps或Gmail,它向世界展示了现代Web技术的功能。

由于竞争激烈的浏览器之战一直持续到今天,JavaScript引擎的性能已大大提高。 主要浏览器背后的开发团队每天都在努力改善其解决方案的性能,这总体上对JavaScript产生了有益的影响。 这些引擎之一就是已经提到的V8,该引擎在Chrome浏览器中使用,并在Node.js中使用。 这是浏览器开发人员渴望获得高性能JS代码的结果之一。

当然,Node.js的流行不仅基于成功的环境组合,而且还基于该平台在正确的时间出现的事实。 她向世界介绍了一种创新的JavaScript服务器端开发方法。 考虑一下Node.js历史上的里程碑。

▍2009


  • Node.js的出现
  • 创建第一个npm选项。

▍2010



▍2011


  • 退出npm 1.0。
  • LinkedInUber这样的大公司已经开始使用Node.js。

▍2012


  • Node.js的迅速普及。

▍2013


  • Ghost的出现, Ghost是第一个使用Node.js的主要发布平台。
  • Koa版本。

▍2014


  • 今年发生了戏剧性的事件。 出现了IO.js项目,它是Node.js的一个分支,其目的尤其是为了引入ES6支持并加速平台的开发。

▍2015



▍2016



▍2017


  • Npm开始更加关注安全性。
  • 输出Node.js 8
  • HTTP / 2支持的出现。
  • V8被正式认可为JS引擎,不仅为Chrome设计,还为Node设计。
  • 每周从npm进行30亿次下载。

▍2018



总结


今天,您熟悉了Node.js平台,了解了其安装,编写和测试了第一个简单的应用程序。 下次,我们将讨论成功为Node.js开发所需的JavaScript知识,浏览器和服务器端JS代码有何不同,并讨论一些Node.js开发技巧。

亲爱的读者们! 告诉我,您是否启动了Node.js的Hello World?

手册的以下部分:
第1部分: 一般信息和入门
第2部分: JavaScript,V8,一些开发技巧
第3部分: 托管,REPL,使用控制台,模块
第4部分: npm,package.json和package-lock.json文件
第5部分: npm和npx
第6部分: 事件循环,调用堆栈,计时器
第7部分: 异步编程

Source: https://habr.com/ru/post/zh-CN422893/


All Articles