本文根据此文章进行学习总结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 是世界上最大的开源库生态系统。
安装Node.js
要得到最新的 Node.js 执行文件,可以访问 Node.js 官网:https://nodejs.org/en/download/。
根据自己的电脑系统及位数选择相应的安装包,安装完会有一些系统环境配置。
具体操作在此贴上链接
这里记录下我的安装路径和环境配置(之前一直搞错了)
要校验 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
让我们看一下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
这里要注意的事情:
- 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