1
0
mirror of https://github.com/apachecn/eloquent-js-3e-zh.git synced 2025-05-18 07:02:19 +00:00
This commit is contained in:
wizardforcel 2018-06-01 16:25:46 +08:00
parent 1aa71a415a
commit f73fb15033
2 changed files with 22 additions and 10 deletions

32
20.md

@ -1,14 +1,26 @@
# 二十、Node.js
> A student asked The programmers of old used only simple machines and no programming languages, yet they made beautiful programs. Why do we use complicated machines and programming languages?. Fu-Tzu replied The builders of old used only sticks and clay, yet they made beautiful huts.
> 原文:[Node.js](https://eloquentjavascript.net/20_node.html)
>
> Master Yuan-Ma, The Book of Programming
> 译者:[飞龙](https://github.com/wizardforcel)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
>
> 部分参考了[《JavaScript 编程精解(第 2 版)》](https://book.douban.com/subject/26707144/)
> A student asked 'The programmers of old used only simple machines and no programming languages, yet they made beautiful programs. Why do we use complicated machines and programming languages?'. Fu-Tzu replied 'The builders of old used only sticks and clay, yet they made beautiful huts.'
>
> Master Yuan-Ma《The Book of Programming》
![](img/20-0.jpg)
到目前为止,我们已经使用了 JavaScript 语言,并将其运用于单一的浏览器环境中。本章和下一章将会大致介绍 Node.js该程序可以让读者将你的 JavaScirpt 技能运用于浏览器之外。读者可以运用 Node.js 构建应用程序,实现简单的命令行工具和复杂动态 HTTP 服务器。
这些章节旨在告诉你建立 Node.js 的主要概念,并向你提供信息,使你可以采用 Nodejs 编写一些实用程序。它们并不是这个平台的完整的介绍。
如果你想要运行本章中的代码,需要安装 Node.js 10 或更高版本。 为此,请访问 [nodejs.org](https://nodejs.org),并按照用于你的操作系统的安装说明进行操作。 您也可以在那里找到 Node.js 的更多文档。
如果你想要运行本章中的代码,需要安装 Node.js 10 或更高版本。 为此,请访问 [nodejs.org](https://nodejs.org),并按照用于你的操作系统的安装说明进行操作。 也可以在那里找到 Node.js 的更多文档。
## 背景
@ -34,7 +46,7 @@ $ node hello.js
Hello world
```
Node 中的`console.log`方法与浏览器中所做的类似,都用于打印文本片段。但在 Node 中,该方法不会将文本显示在浏览器的 JavaScript 控制台中,而显示在标准输出流中。从命令行运行`node`时,这意味着会在终端中看到记录的值。
Node 中的`console.log`方法与浏览器中所做的类似,都用于打印文本片段。但在 Node 中,该方法不会将文本显示在浏览器的 JavaScript 控制台中,而显示在标准输出流中。从命令行运行`node`时,这意味着会在终端中看到记录的值。
若你执行`node`时不附带任何参数,`node`会给出提示符,读者可以输入 JavaScript 代码并立即看到执行结果。
@ -117,9 +129,9 @@ $ node
{ x: '1', y: '2' }
```
运行`npm install`NPM 将创建一个名为`node_modules`的目录。 该目录内有一个包含库的`ini`目录。 可以打开它并查看代码。 当我们调用`require("ini")`时,加载这个库,我们可以调用它的`parse`属性来解析配置文件。
运行`npm install`NPM 将创建一个名为`node_modules`的目录。 该目录内有一个包含库的`ini`目录。 可以打开它并查看代码。 当我们调用`require("ini")`时,加载这个库,我们可以调用它的`parse`属性来解析配置文件。
默认情况下NPM 在当前目录下安装包,而不是在中央位置。 如果习惯于其他包管理器,这可能看起来很不寻常,但它具有优势 - 它使每个应用程序完全控制它所安装的包,并且使其在删除应用程序时,更易于管理版本和清理。
默认情况下NPM 在当前目录下安装包,而不是在中央位置。 如果习惯于其他包管理器,这可能看起来很不寻常,但它具有优势 - 它使每个应用程序完全控制它所安装的包,并且使其在删除应用程序时,更易于管理版本和清理。
## 包文件
@ -241,7 +253,7 @@ server.listen(8000);
每次客户端尝试连接服务器时,服务器都会调用传递给`createServer`函数的参数。`request``response`绑定都是对象,分别表示输入数据和输出数据。`request`包含请求信息,例如该对象的`url`属性表示请求的 URL。
因此,当您在浏览器中打开该页面时,它会向您自己的计算机发送请求。 这会导致服务器函数运行并返回一个响应,您可以在浏览器中看到该响应。
因此,当你在浏览器中打开该页面时,它会向你自己的计算机发送请求。 这会导致服务器函数运行并返回一个响应,你可以在浏览器中看到该响应。
你需要调用`response`对象的方法以将一些数据发回客户端。第一个函数调用(`writeHead`)会输出响应头(参见第十七章)。你需要向该函数传递状态码(本例中 200 表示成功)和一个对象,该对象包含协议头信息的值。该示例设置了`"Content-Type"`头,通知客户端我们将发送一个 HTML 文档。
@ -387,7 +399,7 @@ function urlPath(url) {
}
```
只要建立了一个接受网络请求的程序,就必须开始关注安全问题。 在这种情况下,如果我们不小心,很可能会意外地将整个文件系统暴露给网络。
只要建立了一个接受网络请求的程序,就必须开始关注安全问题。 在这种情况下,如果我们不小心,很可能会意外地将整个文件系统暴露给网络。
文件路径在 Node 中是字符串。 为了将这样的字符串映射为实际的文件,需要大量有意义的解释。 例如,路径可能包含`"../"`来引用父目录。 因此,一个显而易见的问题来源是像`/../ secret_file`这样的路径请求。
@ -458,7 +470,7 @@ methods.DELETE = async function(request) {
当 HTTP 响应不包含任何数据时,状态码 204“No Content”无内容可用于表明这一点。 由于删除的响应不需要传输任何信息,除了操作是否成功之外,在这里返回是明智的。
可能想知道,为什么试图删除不存在的文件会返回成功状态代码,而不是错误。 当被删除的文件不存在时,可以说该请求的目标已经完成。 HTTP 标准鼓励我们使请求是幂等idempotent这意味着多次发送相同请求的结果会与一次相同。 从某种意义上说,如果你试图删除已经消失的东西,那么你试图去做的效果已经实现 - 东西已经不存在了。
可能想知道,为什么试图删除不存在的文件会返回成功状态代码,而不是错误。 当被删除的文件不存在时,可以说该请求的目标已经完成。 HTTP 标准鼓励我们使请求是幂等idempotent这意味着多次发送相同请求的结果会与一次相同。 从某种意义上说,如果你试图删除已经消失的东西,那么你试图去做的效果已经实现 - 东西已经不存在了。
下面是`PUT`请求的处理器。
@ -522,7 +534,7 @@ Node 中的所有输入输出都是异步的,除非你明确使用函数的同
当它有效时,将其扩展,以便当其中一个参数是目录时,它将搜索该目录及其子目录中的所有文件。
按照认为合适的方式,使用异步或同步文件系统函数。 配置一些东西,以便同时请求多个异步操作可能会加快速度,但不是很大,因为大多数文件系统一次只能读取一个东西。
按照认为合适的方式,使用异步或同步文件系统函数。 配置一些东西,以便同时请求多个异步操作可能会加快速度,但不是很大,因为大多数文件系统一次只能读取一个东西。
### 目录创建

BIN
img/20-0.jpg Normal file

Binary file not shown.

After

(image error) Size: 25 KiB