Node.js介绍

本文根据此文章进行学习总结https://segmentfault.com/a/1190000019283751

第一章

Node.js概述

Node.js 是一个建立在 Chrome 的 JavaScript 引擎 V8 之上的 JavaScript 运行时环境。Node.js 使用一个事件驱动的、非阻塞式的 I/O 模型,让它轻量而高效。

也就是说:Node.js 提供了用 JavaScript 编写服务器的可能性,这种服务器具有令人难以置信的性能。正如官方声明所说:Node.js 是一个使用与 Google Chrome 浏览器相同 JavaScript 引擎 V8 的运行时环境。但是这还不足以支撑 Node.js 的成功,Node.js 还使用了专注于异步 I/O 的多平台支持库 libuv。

便于理解的话
Node 运行时环境包含执行 JavaScript 程序所需要的一切。
如果你了解 Java 的话,会发现它们有点像。

JavaScript 原来是只能在浏览器中运行的,当把它扩展成为可以在你的计算机上作为独立的程序运行时,Node.js 就出现了。

现在你可以用 JavaScript 做更多的事情,而不仅仅是用在网站的互动和特效上。
JavaScript 现在能够去做其他脚本语言(如Python)可以执行的操作。

为什么选择 Node.js?

这是 Node.js 官方网站上给出的正式定义:

Node.js®是基于 Chrome 的 V8 JavaScript 引擎构建的 JavaScript 运行时环境。
Node.js 使用事件驱动的非阻塞 I/O模型,轻量且高效。
Node.js 的包生态系统 npm 是世界上最大的开源库生态系统。

image.png

安装Node.js
要得到最新的 Node.js 执行文件,可以访问 Node.js 官网:https://nodejs.org/en/download/。

根据自己的电脑系统及位数选择相应的安装包,安装完会有一些系统环境配置。
具体操作在此贴上链接
这里记录下我的安装路径和环境配置(之前一直搞错了)

image.png

image.png

要校验 Node.js 的启动和运行,执行:

node --version

安装完成,Hello World
要开始使用 Node.js,先在终端中试试!只需要键入 node,就可以启动 Node.js:

$ node
>

好了,下面我们试着打印点什么:

$ node
> console.log('hello from Node.js')

一旦敲了回车,就会得到下面这样的信息:

> console.log('hello from Node.js')
hello from Node.js  
undefined  

使用终端随便玩玩 Node.js,尝试点小代码片段,因为我不想把它们放到一个文件中。

现在我们来创建一个index.js文件,复制如下代码片段到该index.js中:

// index.js
console.log('hello from Node.js')  

要运行该文件,只需再次打开终端,转到你存放 index.js 文件的目录,然后执行node index.js命令。你会看到它会在终端上直接打印字符串 hello from Node.js。

另外终端进入文件是这样的:
Windows键+R打开运行,输入cmd敲回车,打开命令提示符程序
输入cd\敲回车会直接退回到C盘根目录
在CMD程序里输入 d: 敲回车可以进入D盘
进入D盘后输入cd\src就可以进入d盘的src文件夹
输入cd..敲回车会退回到上一级目录

模块化你的应用程序

现在你已经有了index.js文件,会使用简单的node命令去运行js文件。(而不需要像之前那样新建html文件,引入js,运行在浏览器端)下面升级游戏,我们创建更复杂的应用,基于可读性和可维护性的目的,将源代码分成多个 JavaScript 文件。打开编辑器,(我这里使用vscode),创建如下目录结构(带有空文件),但是暂时忽略 package.json,我们将在下一步自动生成它:

├── app
| ├── calc.js
| └── index.js
├── index.js
└── package.json

每个 Node.js 项目都是从创建一个package.json 文件开始 - 可以把它当作是应用程序及其依赖的 JSON 表示。它包含了应用程序的名称、作者,以及运行应用程序所需的所有依赖。我们打算在后面使用 NPM 一章中再讲解依赖。

可以在终端中使用 npm init 命令,以交互式的方式生成 package.json 文件。

键入回车后,会被要求给几个输入,比如应用程序的名称、版本、描述等等。不要担心,只管敲回车,直到得到了 JSON 片段,以及提问 is it ok?。最后一次敲回车,package.json 就被自动生成了,放在应用程序的文件夹中。如果在 IDE 中打开该文件,就会看到跟如下代码片段很相似的代码:

{
  "name": "@risingstack/node-hero",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC"
}

你也可以在 package.json 中的scripts里,添加一个 start脚本,像上例一样添加了 "start": "node index.js",就可以用 npm start 启动应用。如果要把应用程序部署给 PaaS 提供者,那么就很方便了 - 它们会识别它,然后用它启动你的应用程序。

现在回到我们创建的第一个文件 index.js。我建议让这个文件保持很瘦 - 只请求应用程序本身(来自你之前创建的 /app 子目录下的 index.js 文件)。复制如下脚本到 index.js文件,然后存盘:

// index.js
require('./app/index')  

现在到了开始创建实际应用程序的时候了。打开 /app文件夹下的 index.js文件,创建一个很简单的示例:数字数组相加。在本例中, index.js 会只包含我们要加的数字,执行计算的逻辑需要放在另一个模块中。

将如下脚本粘贴到 /app目录下的 index.js 中。

// app/index.js
const calc = require('./calc')

const numbersToAdd = [  
  3,
  4,
  10,
  2
]

const result = calc.sum(numbersToAdd)  
console.log(`The result is: ${result}`)  

现在将实际的业务逻辑粘贴到同一文件夹下的 calc.js 文件中。

// app/calc.js
function sum (arr) {  
  return arr.reduce(function(a, b) { 
    return a + b
  }, 0)
}

module.exports.sum = sum  

要检查你是否成功,就保存这些文件,打开终端,键入 npm start 或者 node index.js。如果你所有东西都做对了,会得到答案:19。如果出错了,就仔细检查一下控制台日志,根据日志找到问题所在。

第二章

使用NPM网站

简而言之: NPM是Node.js应用程序使用的软件包管理器,您可以在此处找到大量的模块,因此您不必重新发明轮子。就像Java的Maven或PHP的Composer一样。您将与两个主要界面交互,NPM网站和NPM命令行工具包。

命令行界面
要运行CLI,只需使用以下命令即可运行它:

npm

请注意,NPM与Node.js二进制文件捆绑在一起,因此您不必安装它-但是,如果要使用特定的npm版本,则可以对其进行更新。如果你想安装NPM版本3,你可以做到这一点:npm install npm@3 -g。

使用NPM:教程

创建文件时,您已经在上一篇关于Node.js入门的上一篇文章中遇到了NPM package.json。让我们扩展知识!

添加依赖项

在本节中,您将学习如何向应用程序添加运行时依赖项。
拥有package.json文件后,就可以向应用程序添加依赖项。让我们添加一个!请尝试以下操作:

npm install lodash --save

通过此单个命令,我们实现了两件事:首先,lodash将其下载并放置到node_modules文件夹中。这是所有外部依赖项所在的文件夹。通常,您不想将此文件夹添加到源代码管理中,因此,如果您使用的是git,请确保将其添加到.gitignore文件中。
这是我项目中的gitignore

image.png

让我们看一下package.json文件中发生了什么!dependencies出现了一个新的属性:

"dependencies": {
  "lodash": "4.6.1"
}

这意味着lodashwith版本4.6.1现已安装并可以使用。请注意,NPM遵循SemVer到版本软件包。
由于lodash是随时可以使用,让我们看看我们如何能做到这一点!您可以用与自己的模块相同的方式进行操作,除了现在不必定义路径,只需定义模块名称即可:

// index.js
const _ = require('lodash')

_.assign({ 'a': 1 }, { 'b': 2 }, { 'c': 3 });
// → { 'a': 1, 'b': 2, 'c': 3 }

添加开发依赖
在本节中,您将学习如何向应用程序添加构建时依赖项。
在构建Web应用程序时,可能需要缩小JavaScript文件,并置CSS文件等。将执行此操作的模块仅在资产构建期间运行,因此正在运行的应用程序不需要它们。

您可以使用以下命令安装此类脚本:

npm install mocha --save-dev

完成此操作后,package.json文件中将出现一个新部分devDependencies。与您一起安装的所有模块--save-dev都将放置在此处-而且,它们将被放置在同一node_modules目录中。

NPM脚本
NPM脚本是一个非常强大的概念-在它们的帮助下,您可以构建小型实用程序,甚至组成复杂的构建系统。

最常见的是start和test脚本。使用,start您可以定义test在运行测试时应如何启动应用程序。在您package.json看来,它们看起来像这样:

  "scripts": {
    "start": "node index.js",
    "test": "mocha test",
    "your-custom-script": "echo npm"
  }

这里要注意的事情:

  • start:非常简单,它仅描述您的应用程序的起点,可以使用 npm start
  • test:此操作的目的是运行测试-这里的一个陷阱是,在这种情况下mocha不需要全局安装,因为npm会在node_modules/.bin文件夹中查找它,并且mocha也将放置在该文件夹中。可以使用调用它npm test。
  • your-custom-script:任何您想要的名称,都可以选择。可以调用它npm run your-custom-script-不要忘记这一run部分!

第三章

异步编程

第四章

第一个 Node.js 服务器
http您的Node.js服务器的模块
当您开始在Node.js中构建基于HTTP的应用程序时,内置的http/https模块就是您将与之交互的模块。

现在,让我们创建您的第一个Node.js HTTP服务器!我们需要使用http模块并将服务器绑定到端口上3000以进行侦听。
index.js文件中输入以下内容:

// content of index.js
const http = require('http')
const port = 3000

const requestHandler = (request, response) => {
  console.log(request.url)
  response.end('Hello Node.js Server!')
}

const server = http.createServer(requestHandler)

server.listen(port, (err) => {
  if (err) {
    return console.log('something bad happened', err)
  }

  console.log(`server is listening on ${port}`)
})

您可以从以下内容开始:

$ node index.js
image.png

这里要注意的事情:

  • requestHandler:每当请求到达服务器时都会调用该函数。如果您localhost:3000从浏览器访问,将出现两则日志消息:一个为/,另一个为favicon.ico
  • if (err):错误处理-如果端口已被占用,或由于其他任何原因我们的服务器无法启动,则在此处收到通知
    该http模块非常底层-使用上面的代码片段创建复杂的Web应用程序非常耗时。这就是为什么我们通常选择与我们的项目一起使用的框架的原因。您可以选择很多东西,但是这些是最受欢迎的:
  • express
  • hapi
  • koa
  • restify
    在本章和下一章中,我们将使用Express,因为您会在NPM for Express上找到最多的模块。

简约的web框架- http://expressjs.com/
仅将NPM安装即可将Express添加到您的项目中:

$ npm install express --save

你可能感兴趣的:(Node.js介绍)