适用于初学者的Node.js教程。第1部分





朋友们,美好的一天!



我将在Node.js指南上为您提供此翻译



其他部分:



第1

部分第2

部分第3

部分第4部分



Node.js简介



Node.js是一个开放且跨平台的JavaScript运行时。对于几乎所有项目来说,这都是一个很好的解决方案。



Node.js在浏览器外部运行V8 JavaScript引擎(Google Chrome的核心)。这使Node.js的生产率很高。



Node.js应用程序作为单个进程运行,无需为每个请求创建新线程。 Node.js在标准库中提供了一组异步I / O原语,以保护JavaScript免受阻塞,并且通常使用非阻塞范式编写Node.js中的库,从而使阻塞行为成为例外而不是规则。



当Node.js执行I / O操作(例如从网络读取(数据),访问数据库或文件系统)而不是阻塞流并等待CPU周期完成时,Node.js在收到响应后将继续执行该操作。



这使Node.js可以通过一台服务器同时处理数千个请求,而无需使用可能导致严重错误的流一致性系统。



Node.js的一个显着优势是,数百万开发人员为浏览器编写JavaScript代码时,除了具有客户端代码之外,现在还能够编写服务器端代码,而无需学习完全不同的语言(编程)。



在Node.js中,可以毫无问题地使用新的ECMAScript标准,您不需要等到所有用户都更新他们的浏览器后-您可以通过更改Node.js的版本来确定要使用的ECMAScript版本,还可以通过运行Node.js来添加实验性功能带有(对应)标志。



大量的图书馆


Npm具有简单的结构,为Node.js生态系统的快速发展做出了贡献;如今,npm已注册了超过1,000,000个开放包,您可以免费使用这些包。



示例Node.js应用程序


Node.js最常见的用例是创建一个Web服务器:



const http = require('http')

const hostname = '127.0.0.1'
const port = process.env.PORT 

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}/`)
})


首先,我们包含http模块



Node.js具有出色的标准库,其中包括一流的网络支持。



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



服务器设置为侦听特定的端口和主机。服务器就绪后,回调函数将启动,在这种情况下,将通知服务器正在运行。



当一个新的呼叫请求事件请求request时,包含两个对象:请求(对象http.IncomingMessage(传入消息))和响应(对象http.ServerResponse(服务器响应))。



这些对象是处理HTTP调用所必需的。



第一个对象包含请求详细信息。在我们的示例中未使用它,但是您可以访问请求标头及其数据。



第二个对象用于向请求者提供数据。



在这种情况下,



res.statusCode = 200


我们将statusCode属性设置为200,以指示请求成功完成。



我们设置Content-Type标头(内容或内容类型)



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


并通过添加内容作为参数来关闭响应end()



res.end('Hello World\n')


Node.js框架和工具


Node.js是一个低级平台。为了满足开发人员的需求,已经创建了数千种不同的库。



随着时间的流逝,其中许多已变得非常流行。这是其中一些的列表:





Node.js



信不信由你,Node.js诞生只有10年了。



进行比较:JavaScript已经存在了24年,而Web已经存在了30年,



10年对于技术来说是很短的时期,但是有时似乎Node.js一直存在。



自从它诞生仅2年之后,我就知道了。但是即使如此,尽管信息有限,但它似乎仍在等待着美好的未来。



在本节中,我们将看一下Node.js历史的概况。



一点历史


JavaScript是Netscape发明的一种编程语言,是一种脚本工具,用于在Netscape Navigator浏览器中处理网页



Netscape商业模型的一部分是出售包含Netscape LiveWire的Web服务器,该服务器能够使用服务器端JavaScript创建动态页面。不幸的是,Netscape LiveWire失败了,直到Node.js才使用服务器端JavaScript。



Node.js普及的关键因素之一是它的时机。早在几年前,由于“ Web 2.0”应用程序(例如Flickr,Gmail和其他应用程序)向世界展示了现代Web的外观,因此JavaScript被认为是一种严肃的(编程)语言。



随着浏览器努力提高性能以使用户受益,JavaScript引擎也得到了显着改善。主要的浏览器开发团队一直在努力为JavaScript提供更好的支持并尽快执行。使用Node.js V8的引擎(也称为Chrome V8-Chromium的开放式JavaScript引擎)在这项比赛中脱颖而出。



Node.js在正确的时间和正确的位置出现。幸运的是,这并不是其受欢迎的唯一原因。该项目包含许多开发人员都喜欢的服务器端JavaScript开发的大量创新思想和方法。



2009年


  • Node.js出现了
  • Npm出现


2010


  • 表达
  • 套接字


2011年


  • npm 1.0版
  • Node.js: LinkedIn, Uber .
  • hapi


2012


  • Node.js


2013




2014


  • : Node.js io.js ( — git) ES6


2015




2016




2017


  • npm
  • Node.js 8
  • HTTP/2
  • V8 Node.js , Node.js JS Chrome
  • 3 npm


2018


  • Node.js 10
  • 带有.mjs扩展名的ES模块的实验支持


如何安装Node.js?



Node.js可以通过多种方式安装。



主要平台的发行版可在官方网站找到



安装Node.js的一种非常方便的方法是使用程序包管理器。每个操作系统都有其自己的。



在macOS上,这是Homebrew,使用命令行可以轻松安装Node.js:



brew install node


Linux,Windows和其他系统的软件包管理器列表在此处



nvm是运行Node.js的一种流行方法。它使您可以轻松地在Node.js版本之间切换,安装新版本进行测试以及在出现问题时撤消安装。



在较旧版本的Node.js中测试代码时,它也非常有用。



欲了解更多信息有关nvm遵循此链接



我的建议是,如果您只是刚开始并且以前没有使用过Homebrew,请使用官方安装程序。



安装Node.js之后,您可以node在命令行上访问可执行程序



您应该如何了解JavaScript与Node.js一起使用?



作为一个初学者,很难确定您的编程水平。



也很难确定JavaScript在哪里结束,Node.js在哪里开始,反之亦然。



就个人而言,我建议您在深入研究Node.js之前对以下基本JavaScript概念有一个很好的了解:



  • 语法或词法结构
  • 表达式(基本上是相同的语法)
  • 数据类型)
  • 变数
  • 功能
  • 这个关键词
  • 箭头功能
  • 周期数
  • 可见区域
  • 数组
  • 模板或字符串文字
  • 分号(可能是强制使用的情况,例如,与IIFE一起使用时)
  • 严格制度
  • ECMAScript 6,2016,2017


掌握这些概念是专业的全栈开发人员之路的开始。



以下概念也是理解异步编程的关键,异步编程是Node.js的基本组成部分:



  • 异步编程和回调函数(回调)
  • 计时器(计数器)
  • 承诺(promises)
  • 异步/等待
  • 关闭
  • 事件循环(调用堆栈)


Node.js和浏览器之间的区别



JavaScript可以在浏览器和Node.js中使用。



但是,构建浏览器应用程序与构建Node.js应用程序非常不同。



尽管在两种情况下都使用JavaScript,但仍有一些关键差异决定了开发的细节。



从JavaScript前端(前端开发人员-应用程序的客户端)的角度来看,在Node.js中开发应用程序具有显着的优势,这体现在以下事实:客户端和服务器上的所有地方都使用相同的编程语言-JavaScript。



这是成为一个完整堆栈的绝好机会:我们都知道全面,深入地学习一种新的编程语言是多么困难,在这种情况下,就没有这种需要。



唯一需要研究的是生态系统。



在浏览器中,大多数时候我们必须处理DOM和其他Web API,例如cookie。当然,它们在Node.js中不存在。 Node.js缺少窗口,文档和其他特定于浏览器的对象。



另一方面,浏览器缺少Node.js通过模块提供的出色API,例如对文件系统的访问。



另一个很大的不同是,在Node.js中,您可以控制代码执行环境。除非您正在开发任何人都可以在任何地方部署的开源应用程序,否则您将知道使用哪个版本的Node.js来运行该应用程序。与浏览器运行时不同,这非常方便,因为用户可以决定使用哪个浏览器。



这意味着您可以编写您的Node.js版本支持的JavaScript代码。



由于JavaScript的发展非常动态,因此浏览器并不总是有时间快速实现该语言的新功能,用户也不一定总是及时更新,因此在Web上,您通常必须维护旧的JavaScript。



要将代码转换为ES5,可以使用Babel;在Node.js中,这不是必需的。



另一个区别是Node.js使用CommonJS模块化系统,而浏览器支持ES模块。



实际上,这意味着在Node.js中我们使用require()和在浏览器中import



谢谢朋友们的关注。如果您发现错误和错别字,请毫不犹豫地写在PM中,我将不胜感激。



未完待续…



All Articles