From 85164b3cd9536c6e4aede5cb2e3cfa392670cfae Mon Sep 17 00:00:00 2001 From: Sherman Date: Mon, 14 Oct 2019 20:29:55 +0100 Subject: [PATCH] Fixed formatting and typos --- .../meet-the-node-console.chinese.md | 4 ++-- .../basic-node-and-express/serve-an-html-file.chinese.md | 9 ++++++++- .../serve-json-on-a-specific-route.chinese.md | 4 ++-- .../serve-static-assets.chinese.md | 4 ++-- .../start-a-working-express-server.chinese.md | 6 +++--- .../use-body-parser-to-parse-post-requests.chinese.md | 8 ++++---- .../basic-node-and-express/use-the-.env-file.chinese.md | 4 ++-- 7 files changed, 23 insertions(+), 16 deletions(-) diff --git a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/meet-the-node-console.chinese.md b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/meet-the-node-console.chinese.md index f291b32ee9..a713133844 100644 --- a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/meet-the-node-console.chinese.md +++ b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/meet-the-node-console.chinese.md @@ -6,11 +6,11 @@ challengeType: 2 --- ## Description -
0在开发过程中,能够检查代码中发生的情况非常重要。 Node只是一个JavaScript环境。与客户端JavaScript一样,您可以使用控制台显示有用的调试信息。在本地计算机上,您将在终端中看到控制台输出。在Glitch上,您可以打开屏幕下方的日志。您可以使用“日志”按钮切换日志面板(左上角,在应用名称下)。 0要开始使用,只需在控制台中打印经典的“Hello World”即可。我们建议在应对这些挑战时保持日志面板处于打开状态。阅读日志,您可以了解可能发生的错误的性质。 +
在开发过程中,能够检查代码中发生的情况非常重要。 Node只是一个JavaScript环境。与客户端JavaScript一样,您可以使用控制台显示有用的调试信息。在本地计算机上,您将在终端中看到控制台输出。在Glitch上,您可以打开屏幕下方的日志。您可以使用“日志”按钮切换日志面板(左上角,在应用名称下)。 要开始使用,只需在控制台中打印经典的“Hello World”即可。我们建议在应对这些挑战时保持日志面板处于打开状态。阅读日志,您可以了解可能发生的错误的性质。
## Instructions -
0修改myApp.js文件以将“Hello World”记录到控制台。 +
修改myApp.js文件以将“Hello World”记录到控制台。
## Tests diff --git a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-an-html-file.chinese.md b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-an-html-file.chinese.md index 4697e6be79..72d9441483 100644 --- a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-an-html-file.chinese.md +++ b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-an-html-file.chinese.md @@ -6,12 +6,19 @@ challengeType: 2 --- ## Description -
0我们可以使用res.sendFile(path)方法响应文件。 0您可以将它放在app.get('/', ...)路由处理程序中。在幕后,此方法将根据其类型设置适当的标头,以指示您的浏览器如何处理您要发送的文件。然后它将读取并发送文件。此方法需要绝对文件路径。我们建议您使用Node全局变量__dirname来计算路径。 0例如absolutePath = __dirname + relativePath/file.ext0要发送的文件是/views/index.html 。尝试“显示”你的应用程序,你应该看到一个很大的HTML标题(以及我们稍后将使用的表单......),没有应用任何样式。 0注意:您可以编辑上一个挑战的解决方案,也可以创建一个新挑战。如果您创建新解决方案,请记住Express会从上到下评估路由。它执行第一个匹配的处理程序。您必须注释掉前面的解决方案,否则服务器将继续使用字符串进行响应。 +
我们可以使用res.sendFile(path)方法响应文件。 您可以将它放在app.get('/', ...)路由处理程序中。在幕后,此方法将根据其类型设置适当的标头,以指示您的浏览器如何处理您要发送的文件。然后它将读取并发送文件。此方法需要绝对文件路径。我们建议您使用Node全局变量__dirname来计算路径。 例如: + +```js +absolutePath = __dirname + relativePath/file.ext +``` +
## Instructions
+要发送的文件是/views/index.html 。尝试“显示”你的应用程序,你应该看到一个很大的HTML标题(以及我们稍后将使用的表单......),没有应用任何样式。 +注意: 您可以编辑上一个挑战的解决方案,也可以创建一个新挑战。如果您创建新解决方案,请记住Express会从上到下评估路由。它执行第一个匹配的处理程序。您必须注释掉前面的解决方案,否则服务器将继续使用字符串进行响应。
## Tests diff --git a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-json-on-a-specific-route.chinese.md b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-json-on-a-specific-route.chinese.md index fefe0fb15d..e27c6c19d1 100644 --- a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-json-on-a-specific-route.chinese.md +++ b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-json-on-a-specific-route.chinese.md @@ -6,12 +6,12 @@ challengeType: 2 --- ## Description -
0虽然HTML服务器提供(您猜对了!)HTML,但API提供数据。 REST (REpresentational State Transfer)API允许以简单的方式进行数据交换,而无需客户端知道有关服务器的任何细节。客户端只需要知道资源的位置(URL),以及它想要对其执行的操作(动词)。当您获取某些信息而不修改任何信息时,将使用GET动词。目前,用于在Web上移动信息的首选数据格式是JSON。简单地说,JSON是一种将JavaScript对象表示为字符串的便捷方式,因此可以轻松传输。 0让我们通过在路径/json处创建一个以JSON响应的路由来创建一个简单的API。您可以像往常一样使用app.get()方法执行此操作。在路由处理程序内部使用方法res.json() ,将对象作为参数传入。此方法关闭请求 - 响应循环,返回数据。在幕后,它将有效的JavaScript对象转换为字符串,然后设置相应的标题以告诉您的浏览器您正在提供JSON,并将数据发回。有效对象具有通常的结构{key: data} 。数据可以是数字,字符串,嵌套对象或数组。数据也可以是变量或函数调用的结果,在这种情况下,它将在转换为字符串之前进行评估。 0将对象{"message": "Hello json"}作为JSON格式的响应提供给对路由/json的GET请求。然后将浏览器指向your-app-url / json,您应该在屏幕上看到该消息。 +
虽然HTML服务器提供(您猜对了!)HTML,但API提供数据。 REST (REpresentational State Transfer)API允许以简单的方式进行数据交换,而无需客户端知道有关服务器的任何细节。客户端只需要知道资源的位置(URL),以及它想要对其执行的操作(动词)。当您获取某些信息而不修改任何信息时,将使用GET动词。目前,用于在Web上移动信息的首选数据格式是JSON。简单地说,JSON是一种将JavaScript对象表示为字符串的便捷方式,因此可以轻松传输。 让我们通过在路径/json处创建一个以JSON响应的路由来创建一个简单的API。您可以像往常一样使用app.get()方法执行此操作。在路由处理程序内部使用方法res.json() ,将对象作为参数传入。此方法关闭请求 - 响应循环,返回数据。在幕后,它将有效的JavaScript对象转换为字符串,然后设置相应的标题以告诉您的浏览器您正在提供JSON,并将数据发回。有效对象具有通常的结构{key: data} 。数据可以是数字,字符串,嵌套对象或数组。数据也可以是变量或函数调用的结果,在这种情况下,它将在转换为字符串之前进行评估。
## Instructions
- +将对象{"message": "Hello json"}作为JSON格式的响应提供给对路由/json的GET请求。然后将浏览器指向 your-app-url/json,您应该在屏幕上看到该消息。
## Tests diff --git a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-static-assets.chinese.md b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-static-assets.chinese.md index 09153dd358..2a24e416b0 100644 --- a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-static-assets.chinese.md +++ b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/serve-static-assets.chinese.md @@ -7,12 +7,12 @@ challengeType: 2 ## Description
-HTML服务器通常有一个或多个用户可以访问的目录。您可以放置应用程序所需的静态资产(样式表,脚本,图像)。在Express中,您可以使用中间件express.static(path)来实现此功能,其中参数是包含资产的文件夹的绝对路径。如果您不知道中间件是什么,请不要担心。我们稍后会详细讨论它。基本上,中间件是拦截路由处理程序,添加某种信息的函数。需要使用app.use(path, middlewareFunction)方法app.use(path, middlewareFunction) 。第一个路径参数是可选的。如果您没有通过它,将为所有请求执行中间件。 0使用app.use()为所有请求安装express.static()中间件。 assets文件夹的绝对路径是__dirname + /public0现在,您的应用应该能够提供CSS样式表。从公共文件夹外部将显示挂载到根目录。你的头版现在应该看起来好一点! +HTML服务器通常有一个或多个用户可以访问的目录。您可以放置应用程序所需的静态资产(样式表,脚本,图像)。在Express中,您可以使用中间件express.static(path)来实现此功能,其中参数是包含资产的文件夹的绝对路径。如果您不知道中间件是什么,请不要担心。我们稍后会详细讨论它。基本上,中间件是拦截路由处理程序,添加某种信息的函数。需要使用app.use(path, middlewareFunction)方法app.use(path, middlewareFunction) 。第一个路径参数是可选的。如果您没有通过它,将为所有请求执行中间件。
## Instructions
- +使用app.use()为所有请求安装express.static()中间件。 assets文件夹的绝对路径是__dirname + /public 。 现在,您的应用应该能够提供CSS样式表。从公共文件夹外部将显示挂载到根目录。你的头版现在应该看起来好一点!
## Tests diff --git a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/start-a-working-express-server.chinese.md b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/start-a-working-express-server.chinese.md index 715aca47a4..8a90715b1d 100644 --- a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/start-a-working-express-server.chinese.md +++ b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/start-a-working-express-server.chinese.md @@ -6,13 +6,13 @@ challengeType: 2 --- ## Description -
0在myApp.js文件的前两行中,您可以看到如何轻松创建Express应用程序对象。这个对象有几种方法,我们将在这些挑战中学到很多方法。一个基本方法是app.listen(port) 。它告诉您的服务器侦听给定端口,使其处于运行状态。您可以在文件底部看到它。这是内部评论,因为出于测试原因,我们需要应用程序在后台运行。您可能想要添加的所有代码都介于这两个基本部分之间。 Glitch将端口号存储在环境变量process.env.PORT 。它的价值是30000让我们的第一个字符串!在Express中,路由采用以下结构: app.METHOD(PATH, HANDLER) 。 METHOD是小写的http方法。 PATH是服务器上的相对路径(它可以是字符串,甚至是正则表达式)。 HANDLER是Express匹配路由时调用的功能。 0处理程序采用表单function(req, res) {...} ,其中req是请求对象,res是响应对象。例如,处理程序 -
function(req, res) {
res.send('Response String');
}
0将提供字符串'Response String'。 0使用app.get()方法为字符串Hello Express提供服务,以匹配/ root路径的GET请求。通过查看日志确保您的代码正常工作,然后在浏览器中查看结果,单击Glitch UI中的“Show Live”按钮。 +
在myApp.js文件的前两行中,您可以看到如何轻松创建Express应用程序对象。这个对象有几种方法,我们将在这些挑战中学到很多方法。一个基本方法是app.listen(port) 。它告诉您的服务器侦听给定端口,使其处于运行状态。您可以在文件底部看到它。这是内部评论,因为出于测试原因,我们需要应用程序在后台运行。您可能想要添加的所有代码都介于这两个基本部分之间。 Glitch将端口号存储在环境变量process.env.PORT 。它的价值是3000 。 让我们的第一个字符串!在Express中,路由采用以下结构: app.METHOD(PATH, HANDLER) 。 METHOD是小写的http方法。 PATH是服务器上的相对路径(它可以是字符串,甚至是正则表达式)。 HANDLER是Express匹配路由时调用的功能。 处理程序采用表单function(req, res) {...} ,其中req是请求对象,res是响应对象。例如,处理程序 +
function(req, res) {
res.send('Response String');
}
将提供字符串'Response String'。
## Instructions
- +使用app.get()方法为字符串Hello Express提供服务,以匹配/ root路径的GET请求。通过查看日志确保您的代码正常工作,然后在浏览器中查看结果,单击Glitch UI中的“Show Live”按钮。
## Tests diff --git a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/use-body-parser-to-parse-post-requests.chinese.md b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/use-body-parser-to-parse-post-requests.chinese.md index 5a212b7b25..23684b43cb 100644 --- a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/use-body-parser-to-parse-post-requests.chinese.md +++ b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/use-body-parser-to-parse-post-requests.chinese.md @@ -6,14 +6,14 @@ challengeType: 2 --- ## Description -
0除了GET之外还有另一个常见的http动词,它是POST。 POST是用于使用HTML表单发送客户端数据的默认方法。在REST约定中,POST用于发送数据以在数据库中创建新项目(新用户或新博客文章)。我们在这个项目中没有数据库,但我们将学习如何处理POST请求。 0在这些请求中,数据不会出现在URL中,它隐藏在请求正文中。这是HTML请求的一部分,也称为有效负载。由于HTML是基于文本的,即使您没有看到数据,也不意味着它们是秘密的。 HTTP POST请求的原始内容如下所示: -
POST /path/subpath HTTP/1.0
From: john@example.com
User-Agent: someBrowser/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
name=John+Doe&age=25
0正如您所见,正文被编码为查询字符串。这是HTML表单使用的默认格式。使用Ajax,我们还可以使用JSON来处理具有更复杂结构的数据。还有另一种编码类型:multipart / form-data。这个用于上传二进制文件。 0在本练习中,我们将使用urlencoded主体。 0要解析来自POST请求的数据,您必须安装一个包:body-parser。该软件包允许您使用一系列中间件,这些中间件可以解码不同格式的数据。请参阅此处的文档。 0在package.json中安装body-parser模块。然后在文件的顶部需要它。将其存储在名为bodyParser的变量中。 -bodyParser.urlencoded({extended: false})返回处理url编码数据的中间件。 extended=false是一个配置选项,告诉解析器使用经典编码。使用它时,值可以只是字符串或数组。扩展版本允许更多的数据灵活性,但它被JSON击败。将app.use()传递给前一个方法调用返回的函数。像往常一样,必须在需要它的所有路由之前安装中间件。 +
除了GET之外还有另一个常见的http动词,它是POST。 POST是用于使用HTML表单发送客户端数据的默认方法。在REST约定中,POST用于发送数据以在数据库中创建新项目(新用户或新博客文章)。我们在这个项目中没有数据库,但我们将学习如何处理POST请求。 在这些请求中,数据不会出现在URL中,它隐藏在请求正文中。这是HTML请求的一部分,也称为有效负载。由于HTML是基于文本的,即使您没有看到数据,也不意味着它们是秘密的。 HTTP POST请求的原始内容如下所示: +
POST /path/subpath HTTP/1.0
From: john@example.com
User-Agent: someBrowser/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
name=John+Doe&age=25
正如您所见,正文被编码为查询字符串。这是HTML表单使用的默认格式。使用Ajax,我们还可以使用JSON来处理具有更复杂结构的数据。还有另一种编码类型:multipart / form-data。这个用于上传二进制文件。 在本练习中,我们将使用urlencoded主体。 要解析来自POST请求的数据,您必须安装一个包:body-parser。该软件包允许您使用一系列中间件,这些中间件可以解码不同格式的数据。请参阅此处的文档。
## Instructions
- +在package.json中安装body-parser模块。然后在文件的顶部需要它。将其存储在名为bodyParser的变量中。 +bodyParser.urlencoded({extended: false})返回处理url编码数据的中间件。注意:extended=false是一个配置选项,告诉解析器使用经典编码。使用它时,值可以只是字符串或数组。扩展版本允许更多的数据灵活性,但它被JSON击败。将app.use()传递给前一个方法调用返回的函数。像往常一样,必须在需要它的所有路由之前安装中间件。
## Tests diff --git a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/use-the-.env-file.chinese.md b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/use-the-.env-file.chinese.md index c4ad297ed6..c8ceecff9d 100644 --- a/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/use-the-.env-file.chinese.md +++ b/curriculum/challenges/chinese/05-apis-and-microservices/basic-node-and-express/use-the-.env-file.chinese.md @@ -7,12 +7,12 @@ challengeType: 2 ## Description
-.env文件是一个隐藏文件,用于将环境变量传递给应用程序。这个文件是秘密的,没有人可以访问它,它可以用来存储你想保密或隐藏的数据。例如,您可以存储来自外部服务或数据库URI的API密钥。您还可以使用它来存储配置选项。通过设置配置选项,您可以更改应用程序的行为,而无需重写某些代码。 0可以从应用程序访问环境变量process.env.VAR_NAMEprocess.env对象是一个全局Node对象,变量作为字符串传递。按照惯例,变量名都是大写的,单词用下划线分隔。 .env是一个shell文件,因此您不需要在引号中包装名称或值。同样重要的是要注意,当您为变量赋值时,等号周围不能有空格,例如VAR_NAME=value 。通常,您将每个变量定义放在单独的行上。 0让我们添加一个环境变量作为配置选项。将变量MESSAGE_STYLE=uppercase存储在.env文件中。然后告诉您在上一次质询中创建的GET /json路由处理程序,如果process.env.MESSAGE_STYLE等于uppercase则将响应对象的消息转换为uppercase 。响应对象应该成为{"message": "HELLO JSON"} 。 +.env文件是一个隐藏文件,用于将环境变量传递给应用程序。这个文件是秘密的,没有人可以访问它,它可以用来存储你想保密或隐藏的数据。例如,您可以存储来自外部服务或数据库URI的API密钥。您还可以使用它来存储配置选项。通过设置配置选项,您可以更改应用程序的行为,而无需重写某些代码。 可以从应用程序访问环境变量process.env.VAR_NAMEprocess.env对象是一个全局Node对象,变量作为字符串传递。按照惯例,变量名都是大写的,单词用下划线分隔。 .env是一个shell文件,因此您不需要在引号中包装名称或值。同样重要的是要注意,当您为变量赋值时,等号周围不能有空格,例如VAR_NAME=value 。通常,您将每个变量定义放在单独的行上。
## Instructions
- +让我们添加一个环境变量作为配置选项。将变量MESSAGE_STYLE=uppercase存储在.env文件中。然后告诉您在上一次质询中创建的GET /json路由处理程序,如果process.env.MESSAGE_STYLE等于uppercase则将响应对象的消息转换为uppercase 。响应对象应该成为{"message": "HELLO JSON"}
## Tests