Transcription
兄弟,我们应该教前端。孩子们害怕后端。他们觉得它太复杂了。我向你保证。如果一个学生看到这个视频的结尾,他的恐惧就会消失。但是怎么做呢?两个字:结构化学习。你很难理解流程。请求是从哪里来的?服务器做了什么?概念感觉是脱节的。在这个视频中,我从 JavaScript 开始,以结构化的方式讲解了数据库设计、REST API、云存储等许多其他主题。我们每 25 分钟开始一个新主题,并将所有主题结合起来,最终创建一个完整的项目。这样,你就能清楚地理解一个真正的后端系统是如何从头到尾工作的。这是由 Sher Coding School 提供的完整后端项目。让我们开始吧。在开始后端之前,让我们先了解一下服务器是什么。服务器是一台拥有自己的操作系统、自己的处理器和自己的内存的机器。那么,这台机器与我们的机器有什么不同呢?与我们的笔记本电脑有什么不同?我们对这台机器进行编程,以便用户提出的任何请求都能得到适当的响应。那么,我们如何对其进行编程,什么是请求和响应呢?我们在视频中已经很好地解释了所有这些。但听一个例子:亚马逊的网站有一个搜索栏。如果你在搜索栏中搜索任何东西,你就会看到所有相关的产品都列在那里。所以,亚马逊的服务器当然也有服务器。亚马逊的服务器被编程成这样:用户想搜索什么,就显示所有相关的产品作为响应。现在我再举一个例子。另一个例子是什么?在你的 Instagram 应用程序中,如果你想创建一个帖子,你会选择一张图片,选择一个标题,然后你的 Instagram 服务器被编程成这样:这个特定的帖子会出现在你的账户中,同时你的所有关注者都能看到这个帖子,以便他们可以点赞。Instagram 的服务器就是这样编程的。服务器如何编程?服务器如何创建?同时,我们还需要了解如何部署我们创建的服务器。那么,让我们继续下一部分,看看我们如何创建一个服务器。服务器是如何创建的呢?我们已经有了机器。机器之后,我们需要对其进行编程,而编程需要一门编程语言。那么,我们将使用哪种编程语言来编程我们的服务器呢?有很多编程语言。我们有 Java、Python、.NET、Ruby,还有 Go。我们有很多编程语言。但我们将在本视频中使用哪一种呢?我们将使用 JavaScript。为什么使用 JavaScript?因为借助 JavaScript,你可以创建非常好的服务器。运行 JavaScript 需要一个名为 Node.js 的东西。所以,我们首先需要在我们的系统上安装 Node.js,安装 Node.js 后,我们就可以运行 JavaScript。然后我们在这里编程服务器。所以,现在我将共享屏幕。看,首先我们需要在这里下载 Node.js。要下载 Node.js,请搜索 Node.js 下载。搜索后,你会看到 Node.js.org 网站。来到这个网站。来到这个网站后,如果你使用 Windows,我建议你现在不要遵循这些命令。在这里,对于 Windows 的预构建 Node.js,以及你的架构,无论是 X64、X86 还是 ARM64,根据你的架构进行下载。下载后,下载这个 MSI 文件并安装。安装后,你还需要运行一个命令。我告诉你是什么。对于 Windows,这是这个设置。对于 Mac,我建议你使用 Homebrew,运行这些 Homebrew 命令,并在你的系统上下载 Node.js。所以,Mac 用户可以通过 CLI 进行操作,Windows 用户可以通过 MSI 文件进行操作。这些是最简单的方法。现在,当你安装了 Node.js 后,打开终端或 CMD PowerS hell,根据你的 Windows 系统。在那里,当你打开 PowerS hell 或终端时,输入命令 Node -v 并按 Enter。这里会显示一个数字。这个数字可能与你系统上的数字不同,这没关系。因为你可能在很久以后才看这个视频,比如 6 个月后,所以这个数字可能会有变化。这完全没问题。所以,如果这里显示一个数字,意味着 Node.js 已经安装在你的系统上了。如果这里没有显示数字,则意味着 Node.js 尚未安装在你的系统上。请再次重复此过程,找出问题所在,并在你的系统上安装 Node.js。现在,你已经在系统上安装了 Node.js。现在我可以在我的系统上运行 JavaScript 了。我绝对可以做到。现在听我说。我们在这里需要理解一个概念:什么是包?包是什么?它是一段代码,由其他开发者编写,但我们仍然可以使用它。那么,发生了什么?听着。有很多事情需要重复很多次。什么意思?这意味着,也许有人已经创建了服务器。是的,当然,你不是第一个创建自己的服务器然后运行它的人。其他人也创建了服务器。所以,创建服务器需要编写很多代码。那么,他做了什么?他做的是,为了避免别人编写大量基础代码。他可以直接开始创建服务器。所以,他做了什么?他把基础代码,没有它就无法启动服务器的代码,转换成了包,然后将包发布到 npm 网站上。他把它放在那里。那么,包是什么?包是其他开发者编写的代码,但我们仍然可以使用它。好的。那么,包的代码存储在哪里?包的代码存储在 npmjs.com 网站上。什么意思?看,如果我再次共享屏幕,你看,如果你来到这里,搜索 npmjs.com。npmjs.com 这个网站,这个网站上存储了大量的包。所以,大量的包代码都存储在这里。这里有很多包。我们有很多包。首先,我将向你展示如何使用一个包。所以,看,这里有一个名为 CatMe 的包。CatMe。所以,我在这里搜索了这个 CatMe 包。搜索后,这里有一个 CatMe 包。这个 CatMe 包是什么样的?它也是一个包,由其他开发者编写,但我仍然可以使用它。好的。这个包是由哪个开发者编写的?我想是 CallView 这个开发者编写了这个包的代码,现在他希望你也能使用它。所以,CallView 这个开发者编写了我们包的代码,并将这个包发布到 npm 网站上,以便我们使用。好的。这个包的代码在哪里?当你来到这个标签时,你会在这里看到 cmd.js、index.js、package.json、scst.js。你会在这里找到很多东西。所以,看,这里我需要使用的包是 CatMe。那么,我们将用它来创建服务器吗?不,不是这样的。我们不会用 CatMe 来创建服务器。我只是在这里告诉你如何使用包。我们将使用另一个包来创建服务器。我只是在这里告诉你如何使用包。所以,首先,如果你想使用任何包,它的代码在哪里?它的代码在 npmjs.com 网站上。它的代码存在于 npmjs.com 网站上。所以,你需要从 npmjs.com 网站上将代码带到你的系统上。我们将这个过程称为什么?安装包。好的,安装包是什么意思?听着。安装包意味着,将 npmjs.com 网站上的代码带到我们的系统上。我们将此称为安装包。安装包有一个命令。在这里,npm i CatMe。复制它。复制后,在 VS Code 中创建一个文件夹。这是我们的 VS Code 文件夹。也可以删除它。我在那里创建了一个名为 Complete Backend 的文件夹。我将在该文件夹中安装我的包。所以,要安装包,这个命令。你将在这里运行这个命令。如何运行?打开终端。打开终端的命令是什么?Ctrl + `。或者这里有一个 Ctrl + ` 按钮。` 键是什么?它是 Escape 键下面的一个按钮。或者另一个选项是:你在这里顶部可以看到一个终端。点击它,然后点击 New Terminal。你可以在这里打开一个新的终端。所以,打开终端。打开终端后,输入 npm i CatMe 并按 Enter。然后,一个包将在这里添加。这里会出现三个文件。这三个文件到底是什么?是两个文件和一个文件夹。这三样东西是什么?我们稍后会谈到。但在此之前,看,当你在这里运行 npm i CatMe 命令时,这个命令会做什么?它会将 CatMe 的所有代码,这些代码存在于 npmjs.com 网站上,带到你的系统上。代码具体会到哪里?我们稍后会谈到。我们肯定会谈到。但现在,我们在这里创建一个文件。文件名是什么?index.js。好的,文件名只能是 index 吗?不。如果你愿意,你可以把它命名为 mamma.js。没问题。只要有扩展名就行。所以,你可以在这里命名为 mamma.js。如果你愿意,你可以命名为 chacha.js,随便你。但 chacha.js 和 mamma.js 听起来不太好。所以,我们将文件名命名为 server.js,或者文件名可以命名为 index.js。很好。所以,文件名是 index。现在,做什么?现在,我们需要使用我安装的 CatMe 包。所以,要安装包,我们已经安装了。要使用包,我们现在将在这里 require CatMe。并且我们需要在这里 require CatMe。好的,我怎么知道要使用 CatMe 包需要 require 它?看,这里有 CatMe。如果你在这里看它的例子,第一个是什么?如果你想使用 CatMe,你需要 require 它。所以,这里是如何使用 CatMe 的。所以,我将在这里 require CatMe。require CatMe 后,我需要调用它。我怎么知道这一点?我通过阅读 CatMe 的文档,知道如何使用它。所以我在这里 require 了 CatMe。require CatMe 后,如果我在这里调用它,并将其打印到控制台。它的文档没有完全说明。所以,console.log。然后,看,我的这个文件,index.js。我的这个文件,index.js。我如何运行它?我告诉过你,我们将使用 JavaScript,而运行 JavaScript 需要 Node.js。是的,我们已经安装了 Node.js。所以,要运行我写的 JavaScript 代码,我将使用 Node.js 来运行它。那么,怎么做呢?所以,要使用 Node.js 运行任何 JavaScript 文件,你在这里输入 Node,然后是你要运行的文件名。所以,你可以写 index.js。Node index.js。写完后,如果你在这里按 Enter,你看,一个随机的猫咪图片被打印出来了。是的,这个包就是这样工作的。它没有实际用途,但它会在你的终端上打印一个随机的猫咪图片。现在,如果你再次运行 Node index.js 文件,你看,又一个随机的猫咪图片。所以,每次运行,都会出现一张随机的猫咪图片。这个包就是这样。所以,这个包的用途就是在这里告诉你如何使用包。好的,还有一些东西遗漏了。什么?三个东西:node_modules 文件夹,package.json 文件,以及 package-lock.json 文件。所以,现在我们来谈谈它们。所以,看,现在会发生什么?首先,我们在这里谈论 node_modules 文件夹。我们为什么要使用 node_modules 文件夹?我们在这里谈论它。所以,听着。我告诉过你,包是什么?包是别人写的代码,但我们仍然可以使用它。而包的代码存储在哪里?它存储在 npmjs.com 网站上。好的?现在,如果我想使用这段代码,我需要将它从 npmjs.com 网站带到我的系统上。我们确实把它带过来了,我们称这个过程为什么?安装包。我们说过。现在听着。如果包已安装。如果代码从 npmjs.com 网站来到我的系统上。那么,代码存储在哪里?那么,代码存储在 node_modules 文件夹中。现在,当你在这里打开 node_modules 文件夹时,你会找到另一个文件夹,它的名字是什么?CatMe。然后在 CatMe 文件夹中,如果你在这里打开 cats.json 文件,你看,这些图片让你有点熟悉。我们不久前在终端上看到过它们。所以,CatMe 文件夹,或者说 CatMe 包的代码,存储在哪里?它存储在 node_modules 文件夹中。所以,node_modules 文件夹存储着我们使用的所有包的代码。然后,如果我们继续,回到 package-lock.json。但我们先看看 package.json 文件。听着。现在听着。我在这里写了一段代码。听着。你现在屏幕上看到的这段代码是我写的。而我的这段代码正在使用一个特定的包。包是什么?CatMe。是的。你看,你在这里使用了它。你在这里 require 了它。是的,你 require 了它。然后你调用了它。这意味着你在使用它,对吧?是的,你在使用它。所以,我写的这段代码正在使用一个特定的包。包的名字是什么?CatMe。是的。所以,package.json 文件做什么?package.json 文件维护着你写的代码正在使用哪些包。你的代码依赖于哪些包。所以,所有这些都由谁来维护?package.json。所以,package.json 的一个非常重要的作用是什么?维护你的代码依赖于哪些包。这是 package.json 的一个非常重要的作用。还有其他作用吗?是的,还有其他作用。但最重要的作用是维护你的代码依赖于哪些包。很好。现在,我再给你看一样东西。听着。打开 node_modules 文件夹。来到 CatMe 包。CatMe,我们的代码,里面还有一个 package.json 文件。是的。那么,它会做什么?它也会在这里维护,CatMe 包依赖于哪些其他包。是的,你安装的包可能依赖于其他包。那么,谁来维护呢?那个特定包的 package.json 文件正在维护。所以,如果你来到 dependencies 下面,你看,在我们的 package.json 的 dependencies 下面,如果你在这里看,你会发现,是的,这个 CatMe 包依赖于一个名为 Yarn 的包。
取决于。好的,那么这个 Yargs 的代码在哪里呢?进入 Node_modules 文件夹。进入 Node_modules 文件夹后,你会在那里找到 Yargs 文件夹。如果你打开 Yargs 文件夹,你也会在那里找到一个 package.json 文件。如果你打开 package.json 文件,你还会找到其他文件夹,在这个文件夹里面你会找到一个特定的包,叫做 camelCase。
所以现在如果我进入 camelCase 文件夹,在 package.json 中,那么如果你现在在这里看,这个 camelCase 文件夹,我想它不依赖于任何其他东西。所以是的,也会有这样的情况,就是某个包不依赖于任何其他文件夹。它本身就是足够的。它不需要任何其他包。
所以现在如果你看,我的代码使用了哪个包?我的代码在这里使用了一个单一的包。它的名字是什么?Catmi。但是 Catmi 这个包,它使用了哪个包?它使用了 Yargs 包。很好。对吗?然后 Yargs 包依赖于一个特定的包。它的名字是什么?camelCase。而 camelCase 依赖于哪个包?它不依赖于任何包。所以这就是一件事。
好的,听着,听着,听着。我知道现在这一点可能会让你有点困惑,但是工作就是这样做的,后端的工作就是这样做的,当你深入学习这些东西时,就是以这种方式工作的。所以我知道这可能看起来有点复杂,但请和我一起再等五分钟,你从未有过如此清晰的后端理解,这是我的保证,伙计。听着,再和我一起等五分钟,我会让你把这些事情弄清楚,这是你以前从未有过的。
听着,那么我们自己的 camelCase 文件夹,不,是 Catmi 包依赖于什么?我们的 Catmi 包依赖于 Yargs。而我们自己的 Yargs 包依赖于 camelCase。那么 camelCase 依赖于哪个包呢?它不依赖于任何其他包。它本身是独立的。
所以现在如果你在这里看,一种链条正在运行,就是我们只使用了 Catmi 包。但是 Catmi 包依赖于另一个包。那个包又依赖于另一个包。那么所有这些事情是谁来维护的呢?所有这些事情都由你的 package-lock.json 文件来维护。它正在维护所有这些事情。
所以你看,你的 package-lock.json 文件维护了什么?它维护了你自己的应用程序依赖于哪个包?同时,你的这个包,你的这个包,就像你看,我们的 Catmi 包依赖于 Yargs,是的,然后我们自己的 Yargs 依赖于 camelCase。所以你的 package-lock.json 文件维护了所有这些事情,就是你的应用程序,你的代码依赖于哪些包,那些包又依赖于哪些包,所有这些事情都是由 package-lock.json 来维护的。
但是告诉你一件事,你对 package-lock.json 的工作量不会那么多,因为它会自己维护自己,我们不需要去碰它,我们不需要去打开它。只是这个文件被创建了,你需要稍微了解一下它,所以我正在告诉你这件事。
现在听着,到目前为止我们在这里理解了一些事情。什么?就是包是什么?所以如果回顾一下,包是什么?包是一种代码,它不是我们写的。是其他开发者写的。但是我们仍然可以使用它。我们称之为包。好的。好的。那么告诉我,这个代码存储在哪里?这个代码存储在你的 npmjs.com 网站上。这个代码被存储了。是的,确实被存储了。
那么如果我想使用这个代码,我需要做什么?我需要把存储在 npmjs.com 网站上的那个代码下载到我的系统上,我们把这个过程叫做什么?安装包。是的,我们把这个过程叫做很好的安装。
好的,那么从 npmjs.com 网站下载到我系统上的代码,它到底去了哪里?这个代码去了 Node_modules 文件夹里面。是的,确实去了 Node_modules 文件夹里面。
好的,没问题。我们还有另一个文件,package.json。是的,这个文件在做什么?这个文件维护了你所写的代码依赖于哪个包,或者依赖于哪些包,所有这些事情都由你的 package.json 文件来维护,很好。
所以我希望你已经清楚了什么是包,为什么安装一个包,如何安装一个包,你已经清楚了,包的代码是如何进入 Node_modules 文件夹的,你已经知道了,package.json 文件的重要作用是什么,你已经知道了,现在我们终于可以继续创建我们的服务器了,我们将使用哪个包呢?我们将在这里使用 Express 包。
所以现在我们来到这里。我们在这里分享屏幕。所以你看,我正在把所有这些东西移除。很好。
所以现在我们有一个名为“Backend Complete Backend”的文件夹。现在它是一个完全空的文件夹。所以现在我们从这里开始认真讨论一些事情。如果你刚才睡着了,现在醒来。如果你刚才睡着了,现在就醒来。为什么?因为现在这里要开始讨论生产级别的事情了,就是说,我会教你后端,但会教得很好。所以我喜欢生产级别,我也会教你生产级别的东西。我做事,做得很好。所以我也将以同样的水平在那里教你。
所以当你谈论一个后端应用程序,并且需要很好地创建那个应用程序时。需要在生产级别创建应用程序时。你就会以非常好的方式开始那个应用程序。不是说你创建了两三个文件,你的服务器就建好了。不是那样的。你也会以非常好的方式开始它。
所以你看,当你创建一个服务器时,服务器到底是什么?实际上,如果我们使用 Express,或者可以说使用 JavaScript,那么服务器就是一个 Node.js 应用程序。是的,当你使用 JavaScript 创建服务器时,你可以称它为一个 Node.js 应用程序。现在 Node.js 应用程序是什么?暂时不要太在意它。但是当你使用 JavaScript 创建服务器时,它就是一个 Node.js 应用程序,并且有一个正确启动 Node.js 应用程序的方法,就是在你的终端上,在你的终端上,你将运行一个命令,命令的名称是 `npm init -y`。
所以当你运行这个特定的命令时,你会得到一个文件,文件的名字是什么?package.json。所以你会得到一个 package.json 文件。现在这发生了什么?就是你以一种非常好的方式初始化了一个 Node.js 应用程序。现在这个应用程序要做什么?你还没有写它的任何代码,但你已经以一种非常好的方式启动了它。
现在听着,要做什么?创建服务器。是的,确实要创建服务器。现在创建一个服务器的一个非常好的方法是,Express 是一个包。Express 是什么?是我们自己的一个包。借助那个包,我们可以非常快地创建一个非常好的服务器,真的。我们可以借助 Express 创建一个非常好的服务器。
所以我们在这里安装 Express 包。为了安装 Express 包,`npm i express` 会做什么呢?它会把 Express 的代码,也就是我们 npmjs.com 网站上的那个代码,下载到我们的系统上,并且会下载到哪里?Node_modules 文件夹里面。所以你看,如果我在这里运行 `npm i express`,那么 Node_modules 文件夹里面,我们自己的这个文件夹里面,Express 的代码就会在这里出现。这就是我们完整的 Express 代码,你可以在这里看到它,所以这就是我们自己的 Express 代码。
现在做完这些之后,我将在这里再创建一个文件。文件的名字是什么?server.js。很好。
现在,如果我想使用 Express。如果我想在这里使用 Express,那么首先我在这里会说,我会 `require` Express,并且在 `require` 之后,在 `require` 之后,我 `require` 了 Express。现在你看,我需要做什么?我需要在这里创建一个服务器。这不就是我们的主要目标吗?就是我需要在这里创建一个服务器。我,是的,确实需要创建。那么为此我正在使用什么?我正在使用 Express 包。确实正在使用。
现在你看,如果借助 Express 包你想创建一个服务器,那是非常容易的。什么?只需调用 Express。你只需做这么多。那么这会发生什么?这会发生的是,当你调用你在这里 `require` 的 Express 时,你的服务器就创建了。确实创建了。
但是两者之间有区别。什么意思?意思是,你看,我告诉你一件事。如果你学过 JavaScript,那么如果你在这里创建一个函数。函数的名字是 `sum`。如果函数的名字在这里是 `sum`。在 `sum` 里面我们有两个特定的参数。`a` 和 `b`,然后你在这里返回 `a + b`。很好。
所以你创建的这个函数,它不会执行,直到你调用 `sum` 函数。什么意思?你已经定义了这个函数,但是这个函数不会被调用或执行,直到你在这里用 `sum(2, 3)` 或其他数字来调用它。
所以同样的事情现在也发生在这里,你已经创建了服务器。你的服务器已经创建了。确实已经创建了。但是这个服务器现在不会启动。那么你如何启动它呢?所以你看,创建服务器是一回事,但是启动服务器是另一回事。
所以你看,现在如果我在这里谈论 `const app`,我们在这里创建的服务器,在调用 Express 之后,我将把这个服务器存储在 `app` 变量中,然后现在我将启动服务器,并且在服务器启动之后,我会在这里说 `app.listen`,`app.listen`。那么现在,我们在这里会给一个回调函数,在回调函数里面我将写“Server is running on port 3000”。现在这个回调函数是什么?我们可以在这里讨论它,或者暂时可以把它移除。我们稍后会讨论它。好吗?那么这个端口号是什么?我们也需要讨论它。现在等一下。
所以你看,我们现在做了什么?我们在这里 `require` 了我们的 Express 包。在 `require` 之后,我们创建了一个服务器。但是创建服务器和启动服务器是不同的。所以我们在这里创建了服务器,并将我们创建的服务器保存到我们的 `app` 变量中。然后我们使用 `app.listen` 命令启动了我们的服务器。因为我们有一个方法叫做 `listen`。我们用这个方法启动了服务器。我们正在使用哪个端口?3000。现在端口是什么?我们也需要讨论它。但是等一下。
现在如果我告诉你这段代码,我们正在创建服务器并启动服务器。这两个是我们的主要工作。所以现在你看,为了运行这段代码。我把这段代码写在哪里了?在 server.js 文件中。所以如果我在这里借助 Node 写入 `node server.js`,那么会发生什么呢?我在这里创建并启动的那个特定服务器。那个服务器已经在这里启动了。已经启动了。确实已经启动了。我怎么相信呢?你看,你现在在这里看到的这个光标,它就停在这里。所以如果它停在这里,意味着有某个进程正在运行。正在运行的是哪个进程?我们的服务器正在运行。我们的服务器现在正在这里运行。运行不是说它已经结束了。不,它现在正在运行。什么意思?听着,我来向你解释。
同样,如果我在这里创建一个文件。文件的名字是,比如说,index.js。在 index.js 之后,如果我在这里 `console`。`console.log(2 + 3)`。现在如果我在这里运行 index.js 文件,你看,如果我在这里输入 `node index.js`,然后按回车,我得到了什么输出?我得到了 5。那么这里发生了什么?就是当我执行 `console.log(2 + 3)` 时,它把这两个数字相加,然后在这里 `console` 出来,这意味着我们的进程执行了整个操作,并将结果打印到输出中,然后结束了,一个简单的故事。
但是当我说到 server.js 时,`node server.js`,我们没有进入下一行。我们停在了同一行。我们没有停滞。发生的是,我们的服务器现在已经在后台启动了。好的,那么服务器已经在后台启动了。是的,确实已经启动了。那么现在我可以在上面发送任何请求吗?是的,你可以发送。你可以发送某种请求。
所以你看,现在如果我来到服务器上。是的,不是服务器,是浏览器上。你看,你的服务器现在在哪里运行?在你的本地机器上。好的?无论你的机器是什么,你的服务器正在那个特定的机器上启动。好的,这意味着你的服务器的主机是谁?本地,你的本地机器。你现在不是在本地机器上启动你的服务器吗?是的。所以你的服务器的主机是你的本地机器。因此你在这里会写什么?`localhost:端口`,也就是说在冒号后面你会给出端口。你会给出什么端口?3000。我们给 `app.listen` 里面的那个数字,你也会在这里给出同样的数字。所以 `localhost`,`localhost` 意味着因为是本地机器,并且在 3000 端口上运行,所以你在这里给出这个。按回车,按回车之后,现在这里会有一个错误,为什么?因为你看,在这里的输出中我们得到了什么?“Cannot GET /”。为什么会这样?这是因为,现在我告诉你,听着。
会发生什么呢?如果你还记得服务器的定义,我曾说过服务器是一台机器,它被编程来响应用户提出的任何请求,并给予适当的响应,这是我们的,是的,确实是。所以现在听着,你在这里做了什么?你在这里创建了服务器,确实创建了。在这一行你只是创建了服务器,在这一行你启动了服务器。确实做了。但是你有没有编程服务器,让它能够对用户提出的请求给出适当的响应呢?在这三行中,你没有做任何与此相关的事情。
现在听着,你需要做什么?现在你在这里会再写一段代码:`app.get`。在这里我正在做什么?我正在编程服务器。为了什么?如果用户发出任何请求,它的响应会是什么?所以 `app.get('/')`,在斜杠之后我在这里会写 `request` 和 `response`,在 `request` 和 `response` 之后,如果我在这里的回调函数里面写 `response.send('Hello World')`,那么现在我在这里做了什么?我们稍微理解一下这段代码,我们会非常仔细地理解它,但首先我们在这里粗略地理解一下,就是我们在这里到底在做什么。所以你看,我们在这里做什么?`app.get` 这是一回事,但我在这里正在编程服务器,如果 `/` API 上有任何请求,你在这里会发送什么响应?“Hello World”。什么意思?就是如果有一个请求,它的响应会是什么?“Hello World” 会在这里发送。是的,确实会发送。
现在看怎么做?所以听着,我告诉你。这里,好的,还有一件事,它还没有更新。为什么?因为你看,当你在这里运行 `node server.js` 这个命令时,这个文件里面还没有这段代码。所以现在在后台运行的你的服务器,它不知道这段代码。那么现在怎么办?所以听着,先把它关闭,然后再次运行命令 `node server.js`,这次启动的服务器,它也会有这段代码。所以现在如果我在这里按回车,按回车之后,我们的服务器启动了,现在如果我回到浏览器上,在 `localhost:3000` 上发出请求,按回车,按回车之后,现在你看,我得到了什么响应?我得到了“Hello World”的响应。
所以你知道你现在在这里做了什么吗?你现在在这里编程了服务器,如果用户发出任何请求,我们会得到什么响应。
好的,现在我们再理解一件事。就再一件事,再听一件事,这会让你更清楚。现在你看,我在这里写一段代码,就是 `app.get('/about', ...)`,在 `/about` 上,响应或者说我们在这里返回的,将是“Response About Page”。好的?
所以现在你看,我在这里做了什么?我现在在这里编程了服务器。为了什么?如果有人在 `/about` 上发出请求。如果在这里 `/about` 上有人发出请求,那么你会在那里发送什么响应?你会在那里发送“About Page”这个响应。好的?
所以现在你看,如果我来到这里,这段代码仍然不会在正在运行的服务器上。所以我们再次关闭它。运行 `node server.js`。在 `node server.js` 之后,我再次回到浏览器上。如果我在这里输入。所以,好的。所以现在如果我在这里输入。你看,我在这里写的代码将是我们的。`localhost:3000/about`,按回车,那么我在这里得到了什么?“About Page”,因为我就是为了这个编程了服务器,或者说...
如果有人向 `/about` 发送请求,会返回什么响应?会返回“关于页面”。
好的,关于斜杠 `/` 也讲过。是的,讲过。那么,如果请求发送到 `/` 会怎么样?会返回“Hello World”。
那么这个斜杠去哪了?斜杠会被移除。如果地址栏的末尾只有斜杠,那么斜杠就会被移除,但请求仍然会发送斜杠。这里只会保留这些。
所以,我刚刚创建了一个服务器。创建服务器后,我启动了它。同时,我还为服务器编程,使其在收到 `/api` 的请求时,返回“Hello World”作为响应。如果有人向 `/about` 发送请求,会返回“关于页面”。
到目前为止,你在这里看到了如何创建服务器,以及如何为服务器编程,使其知道应该返回什么响应。现在,我们还需要理解很多东西,比如:请求和响应到底是什么?端口是什么?在理解端口之后,还有其他东西需要理解。我们还需要看一个完整的文件夹结构。
那么,让我们继续前进吧。是的,各位。
所以,如果你一直坚持看这个视频,那么你做得真的很好。我知道我讲过这些概念很多次了。在我们的线下中心,我给很多学生讲过。所以我知道,如果你一直坚持到这里,并且你理解了所有内容,那么你做得真的很好。
还有一件事我想告诉你,如果我讲的内容你理解了,并且你想更深入地理解它,那么至少自己动手写两遍代码。
目前不要使用 AI。我会告诉你什么时候可以开始使用 AI。我也会告诉你。但至少现在,你需要自己动手写两遍我在这里屏幕上写的代码。只有这样,你才能更好地理解它。
做得很好,真的,我是发自内心地说的。如果你能坚持到这里,那么你做得真的、真的、真的、真的很好。在我的线下中心,我见过很多学生。很多学生在这个阶段都会遇到问题。但如果你能做到,那么你做得真的很好。你做得真的很好。
还有一件事,我们到目前为止都做了什么?
我想我们已经创建了一个服务器,并且为它编程,告诉它如何处理请求并返回响应。我们已经完成了这些。
现在,代码中会有一些部分你可能不清楚。所以,我们需要在这里理解它们。
那么,如果我回到我们的编码屏幕,这就是我们的 VS Code。
进入 VS Code 后,现在让我告诉你,我们是如何创建服务器的。
首先,我们运行了一个命令:`npm init -y`。这个命令的作用是什么?这个命令会为你初始化一个新的 Node.js 应用程序。
然后,我们又运行了一个命令:`npm install express`。这个命令会做什么?它会安装 Express 包。
所以,我们运行这些命令是为了安装 Express 包。
很好。安装 Express 包。
然后,我们创建了一个文件。文件的名字是什么?`server.js`。
所以,我们在这里创建了 `server.js` 文件。
在这个文件里,我们写了我们服务器的全部代码。
现在,我们做了什么?在 `server.js` 中,我们首先 `require` 了我们安装的 Express 包,然后调用了 Express。
好的,这一行 `app = express()` 是做什么的?我来告诉你。
你看,当你调用 Express 时,你是在创建一个服务器实例。是的,会创建一个服务器实例。当你调用 Express 时,你将它返回的内容保存在 `app` 中。
所以,当你调用 Express 时,你会创建一个服务器实例。当你调用 Express 时,你会创建一个服务器实例,然后将它保存在 `app` 变量中。
所以,这只是一个变量。是的,这只是一个变量。如果你愿意,你可以将它命名为任何名字。如果你愿意,你可以把它命名为“Mama”。但是,Express 服务器通常创建的实例,我们通常将其存储在 `app` 中。也就是说,没有固定的规则说你必须将其存储在 `app` 中。但是,在整个行业中,用 Express 创建的服务器通常都保存在 `app` 中。
所以,在这一行中,我们做什么?我们在这里创建服务器实例。我们在这里做了这些。
所以,当你调用 Express 时,会创建一个服务器实例,然后你将创建的服务器实例保存在 `app` 变量中。
好的。那么,我希望这一行你已经理解了。
现在,我们稍后会回到这两行。但首先,我们来理解 `app.listen(3000)` 是做什么的。
所以,听着。在这一行中,你只是创建了服务器的实例。请记住,创建服务器和启动服务器是两件不同的事情。
所以,当我们调用 Express 时,我们的服务器被创建了,但它还没有启动。服务器没有启动,所以它无法监听任何请求。
为了启动服务器,我们在这里使用了一个方法。这个方法的名字是什么?`app.listen`。
所以,这个 `listen` 方法是我们的方法名,我们使用它来启动服务器。我们使用 `app.listen` 方法来启动服务器。
好的?所以,这个 `app.listen` 方法里面有一个数字:3000。这个 3000 到底是什么?这个 3000 到底是什么?
它是一个端口号。这个端口号是 3000。
那么,端口是什么?所以,我们来稍微谈谈端口。
所以,让我们回到白板。回到白板后,我正在清除这个。
我正在清除这个。
好的?所以,现在,如果你去大学或学校,假设我们以大学为例。
那么,大学里会发生什么?会有一栋很大的建筑。这里会有一栋很大的建筑,这栋建筑里面会有很多不同人的隔间。
假设这里是你的主任的隔间。主任的隔间号码是 001。这个隔间的号码是 01。
然后,这里有一个董事长办公室,董事长办公室的号码是 02。这是这个隔间的号码。
然后,还有其他系主任。比如不同系的系主任,他们的隔间也在这里。所以,03。03 之后,我可能可以把它放在这里。我稍微整理一下,看起来会好一点。
好的?好的?
然后,我们还有其他系主任。所以,他们都有自己的隔间。就这样,我们有很多隔间。
这里有很多隔间。
这些都是大学的建筑。大学的建筑,其中不同的区块代表不同的隔间。主任的隔间号码是 01,董事长的号码是 02,系主任的号码是 03。然后是 04。就这样,我们有不同的隔间。
所以,听着。这里会发生什么?
假设你想见主任,或者想和主任谈谈。你会去哪个隔间?你会去 01。
如果你想和董事长谈谈,你会去哪个隔间?你会去 02。
如果你想和系主任谈谈,那么对于系主任,你会去 03。
这就是系统。
在类似的方式下,你的系统,系统是什么?你的笔记本电脑,你的电脑,它也有同样的系统。
什么意思?你的笔记本电脑就像一栋建筑。假设你的笔记本电脑就像一栋建筑,里面有很多应用程序。
那么,这里有什么应用程序?这里有一个叫做“邮件”的应用程序。
那么,邮件服务器在你这里。如果你有邮件服务器,那么邮件是一个应用程序。
然后,这里还有其他东西,比如“文件”。文件有一个单独的应用程序,比如文件资源管理器,或者 Mac 上的 Finder。
所以,这两种东西你都可以拥有。
那么,邮件服务器,这个邮件服务器,它能和什么通信?邮件服务器,它能和端口号 25 通信。
然后,文件,它能和端口号 20 通信。
所以,这里发生了什么?听着。
整个系统是你的电脑或笔记本电脑。这是你的系统。
在这个系统里面,有不同的应用程序。
如果你想让这些不同的应用程序通信,也就是说,外面的互联网,互联网要和这些在你的系统里面的应用程序通信,那么就需要通过端口进行通信。
比如,你的邮件服务器,我认为它使用的端口是 25。
然后,你的文件系统,如果你想和它通信,那么我们可以使用端口号 20。
类似地,我们在这里要做什么?
我们在这里创建一个服务器。是的,我们用 Express 在你的系统上创建一个服务器。
所以,你的服务器也会占用一个房间,你的服务器,你的服务器会占用一个房间。
这个房间是哪个房间?端口号 3000。
所以,如果我们的互联网要和我们的服务器通信,它会访问哪个端口?它会访问这里的端口号 3000。
如果需要访问其他特定端口,与另一个应用程序通信,那么如果要与邮件通信,就使用 25。如果要与文件通信,就使用端口号 20。
以此类推,还有很多其他应用程序,如果你想与它们通信,那么我们需要使用不同的端口。
所以,我希望你已经理解了端口是什么。
然后,我们继续前进。还有一些东西需要我们理解。
比如,什么?比如,我们需要理解 `app.get`。我们创建了这两个 API。
那么,API 是什么?我将在大约 5 分钟后向你解释 API 到底是什么。
但在此之前,我们来稍微了解一下 `req`,我们称之为请求,以及 `res`,我们称之为响应。
我们来稍微了解一下这两个词,这两个关键字。
所以,听着。
那么,这个 `req`,我们称之为请求。
那么,请求是什么意思?请求。你可以说,在这个代码中,它的意思是?
听着,任何可以从前端来的数据。
它可以是任何数据。
它是什么意思?它可以是用户的全名,用户的电子邮件地址,用户的个人资料图片。如果用户正在上传其他文件,那么所有这些文件。
什么意思?任何可以从前端来的数据,你只能通过请求来访问。
什么意思?如果任何数据从前端来到后端,那么你只能通过请求来访问这些数据。在 Express 中,没有其他方法。
现在,听着。你对请求有了一点了解。
现在,我们来谈谈具体是如何获取数据的。
现在,只关注一些主要的事情。
你明白吗?前端可能来的任何数据,你只能通过请求来访问。
现在,如果我们谈论响应。
那么,对于任何进来的请求,应该返回什么响应,你将编写逻辑。你将对其进行编程。
但是,为了返回进来的请求的响应,是的,你已经编写了逻辑。编写逻辑后,你最终要发送的任何响应,为了发送这个响应,你需要使用响应对象。
比如,`response.send` 是一个方法。此外,我们还有另外两三个方法,我们可以用来发送响应。
所以,如果我总结一下请求,那么请求是用来做什么的?用来访问从前端来的任何数据。
而如果我们想从后端发送任何数据回前端,那么我们在这里使用响应。
所以,请求和响应,我们主要就是用来做这些的。
现在,我们需要学习什么?API。API 是一个非常重要的概念。
所以,在下一部分,我们将看到 API 是什么。
以及 REST API,我们需要学习的,它们的主要内容是什么。
好的,现在我们将讨论一个非常重要的话题,那就是 API 是什么?以及 REST API 是什么?
首先,让我们在互联网上搜索一下 API 的意思。
所以,屏幕现在应该能看到了。
如果我在这里搜索“什么是 API?”
那么,如果我在这里搜索“什么是 API?”
搜索后,我在这里看到的结果是:“一套规则或协议,允许不同的软件程序相互通信并交换数据和功能。”
我们可以这样说。
如果我用更简单的方式告诉你,它的意思是什么?
就是说,为了让两个不同的应用程序通信,我们使用的规则和协议集,我们称之为 API。
我们可以这样说。
也就是说,让两个不同的应用程序通信。是的,你可以这样说。
那么,这两个应用程序可能是什么?
那么,它们可能是你的后端服务器,以及在你的前端,在你的浏览器中运行的前端。这可能是另一个应用程序。
这两个是不同的应用程序。
是的,总的来说,你作为用户,会将它们视为一个单一的应用程序。
但是,当你深入了解并了解它们时,你会发现它们被视为两个不同的应用程序。
你的后端服务器将被视为一个单独的应用程序。
而你的前端服务器,它将被视为一个单独的应用程序。
前端服务器不是,在你的浏览器中运行的前端被视为一个单独的应用程序。
好的?所以,API 是什么?API,如果我们在这里理解,就是一套规则和协议,通过它们的帮助,两个不同的应用程序可以通信。
好的?那么,REST API 是什么?
如果我谈论 REST API,那么我在这里搜索一下“API 类型”。
“API 类型”。如果我在这里搜索。
那么,API 可以根据几个主要方面进行分类,比如……
好的,根据架构风格和协议,如果我在这里定义 API 的类型,那么它们是哪些?
首先,这里有什么 API?REST API,Representational State Transfer API。这是一个 API。
然后,你有 SOAP API。SOAP API,RPC,GraphQL,WebSocket。
所以,有很多 API。
我们在这里主要需要学习的 API 是什么?是 REST API。
那么,REST API 是什么?
REST API 也是一种 API 类型。也就是说,API 主要用于让两个不同的应用程序通信。
但是,具体如何通信,REST API 会在这里告诉你。
REST API 有一些规则,我们在这里使用这些规则。
所以,REST API 的第一个规则是什么?
它说,如果你想让两个不同的应用程序通信。
哪两个应用程序?你的后端服务器,以及在你的浏览器中运行的前端应用程序。
如果你想让它们通信,那么你在这里使用的协议是什么?
将使用 HTTP 协议。
此外,还有一些方法,GET,POST,PUT,DELETE。你将使用它们来创建 API。
听着。现在,你在这里需要做什么?听着。
那么,我将为你提供一个 PDF 文件,你可以在这个视频的描述中找到它。
REST API 名为 PDF 文件。
所以,如果我为你提供一个 PDF 文件。
那么,让我打开那个 PDF 文件。
好的?只需要两分钟。
好的?
所以,iCloud,然后在这里,我进入 Notes,在 Notes 中,有 Backend 和 REST API,就是这个。很好,这就是我们的 PDF。同样的 PDF,你可以在这个视频的描述中找到,名为 REST PDF。所以,看看这里,REST API 的很多东西都写在这里了,关于理解 REST API 是什么,它的关键概念是什么,资源和表示。我希望你打开这个 PDF 看一下,然后至少读一下这些东西,看看它们到底是什么?这样你就会对它们到底是什么有一个更深入的理解。现在,我们在这里主要需要使用的一些东西是什么呢?HTTP 方法。REST API 的第一个规则就是它将使用哪种协议进行通信,它将使用 HTTP 协议。但除此之外,它还使用 HTTP 方法。这取决于我们使用哪种方法。这取决于你的请求是什么类型的。那么,请求是什么类型的呢?这是什么意思?我会告诉你请求是什么类型的。所以,我们这里主要有五种方法。但目前,我们在这里将学习四种方法。是哪四种呢?GET、POST、PATCH 和 DELETE。我们将在这里学习这四种方法。PUT 方法。我们稍后会更详细地讨论它。但目前是 GET、POST、PATCH 和 DELETE。我们将在这里讨论这些方法。那么,现在看看,为什么以及在哪里确切地使用这些方法?我们也需要讨论这一点。但首先,要理解为什么我们确切地使用这四种方法?所以,首先,如果我在这里谈论 GET 方法,那么 GET 方法,我们使用这种方法,当我们想要从服务器获取数据时。数据是如何到达服务器的?我们将讨论这一点。我们将讨论这一点。等等,等等,等等。所以,看看,我们什么时候使用 GET 方法?我们什么时候使用 GET 方法?想要从服务器获取数据,或者说获取数据。想要从服务器获取数据,然后使用它。好的?所以,当想要从服务器获取数据时,我们将在这里使用 GET 方法。那么,什么时候使用 POST 方法呢?我们将在想要将数据发送到服务器时使用 POST 方法。我写服务器的拼写写不出来。当想要将数据发送到服务器时,我们将在这里使用 POST 方法。很好。然后,如果我在这里谈论 PATCH 方法。那么,我们为什么在这里使用 PATCH 方法呢?当数据已经存在于服务器上时。当数据已经存在于服务器上时。服务器上已经有数据了。并且想要更新这些数据。所以,当想要更新这些数据时,我们将在这里使用 PATCH 方法。最后,我们有一种方法,它的名字是什么?DELETE。那么,DELETE 方法的作用是什么呢?服务器上有数据,并且想要删除它。然后,我们将在这里使用 DELETE 方法。很好。所以,这些是我们的一些方法。现在我们这里有四种方法。GET、POST、PATCH、DELETE。我们什么时候使用 GET 方法?当服务器上有数据,并且想要将这些数据获取到我们的前端时。然后,我们将在这里使用 GET 方法。我们什么时候使用 POST 方法?当我们想要将数据从前端发送到服务器时。然后,我们将在这里使用 POST 方法。我们什么时候使用 PATCH 方法?当我们已经拥有数据时。我们服务器上已经有数据了。并且想要更新这些数据。然后,我们将在这里使用 PATCH 方法。然后,我们什么时候使用 DELETE 方法?当服务器上有数据,并且想要删除这些数据时。然后,我们将在这里使用 DELETE 方法。现在,你可能会理解这一点,有四种方法。我们还需要讨论如何确切地使用它们。现在,看看,为了解释这一切,我们需要做一个非常简单的应用程序,我不会称之为应用程序,而是一个任务。一个任务是什么?创建一个简单的 Notes 应用程序。我们需要在这里创建一个 Notes 应用程序。用户可以在其中创建 Notes。他可以查看他创建的任何 Note。他可以更新一个特定的 Note,并且可以删除一个特定的 Note。这是一个简单的任务。我不会称之为应用程序。应用程序不会这么小。请注意这一点。应用程序是很大的。这是我们的任务。就一个。所以,听着,这里要做的是,我将从头开始。我们将从一个基本的服务器开始。所以,看看会发生什么。在这里,我们需要启动我们的应用程序。所以,启动应用程序,服务器还在运行。好的。所以,清除了。现在,来到 npm init -y。我们的 Node.js 应用程序将被初始化。我们需要安装一个包。npm i express。好的。所以,我们在这里安装了 Express。现在,听着。之前非常基础。因此,所有代码都进入了一个文件。但事实并非如此。当你谈论生产时,有很多文件,每个文件都有其自己的作用,什么样的代码会进入哪个文件。每个文件都有其自己的作用。所以,看看,之前创建的只是一个介绍性的东西。现在,我将在这里将事情提升一个层次。我仍然不会一次性教给你所有东西。随着视频的进展,我们将朝着生产级别的文件夹结构是什么方向前进,并且我们需要理解这一点。所以,现在,我们正在朝着文件夹结构迈进了一步。生产级别的文件夹结构是什么样的?所以,听着,当我们谈论生产级别时,你的服务器,你创建服务器的地方,你会在一个文件夹中创建它。文件夹的名字是什么?src。并且在 src 文件夹中有一个文件。文件的名字是什么?app.js。这是你的文件。这个文件的主要作用是什么?这个文件的主要作用是创建服务器。这个文件的主要作用是创建服务器。好的,创建服务器需要做什么?要创建服务器,我们需要在这里 require Express。require 了 Express。所以,我们可以说,require 了 Express。并且在 require 了 Express 之后,当我调用 Express 时,在这里,我的服务器实例就会被创建。现在,任何将要创建的服务器实例,我都会将其保存在一个变量中。变量的名字是什么?app。很好。所以,变量的名字是 app。并且我在这里将创建的服务器实例保存在 app 变量中。好的?所以,app.js 文件有一个重要的作用:创建服务器。是的,这就是它的作用。好的?所以,服务器被创建了。是的,被创建了。服务器在哪里启动?服务器在一个单独的文件中启动。在哪里?所以,服务器在根目录中启动。根目录是什么意思?这意味着,在这个根文件夹中,你创建一个文件,server.js。这个文件 server.js 不在任何文件夹中。它会在你的根文件夹中。所以,看看,现在,你的 server.js 文件,这个文件的作用是启动服务器。两者之间有区别。创建服务器,这个文件的作用是什么?这个文件的作用是 app.js。app.js 文件创建服务器的作用。而 server.js 文件启动服务器的作用。两者是不同的工作。所以,听着,你现在做了什么?现在,仔细听我说。在 app.js 中,你已经创建了服务器,并且在哪里启动它?在 server.js 中。这是你的主要工作。是的,这就是工作。那么,在生产中是这样工作的吗?是的,是这样工作的。如果你不想这样做,你就没有办法。你必须这样做。没有办法。你必须这样做。没有办法。所以,听着。app.js 的主要作用是什么?创建服务器。而 server.js 的主要作用是什么?启动服务器。这是这两个文件的主要作用。所以,听着,现在呢?服务器已经被创建了。在哪里启动?在 server.js 中。好的?所以,你现在在 app.js 文件中创建的服务器,需要将其带到 server.js 文件中。那么,你会怎么做?你将从 app.js 文件中导出你在 app.js 文件中创建的服务器。怎么做?在这里写 module.exports = app。现在,听着,这里发生了什么?你在这里导出了你在服务器上创建的服务器。从哪个文件导出的?app.js 文件。所以,你从 app.js 文件中导出了服务器,并且导出后,你还有一个工作要做,什么?去 server.js 文件,然后 require。app = require。并且在 require 中,你会写,在 src 文件夹中,你的 app.js 文件,你在这里 require 它。那么,这意味着什么?听着。在这行中,你 require 什么?在这行中,你在这里 require 什么?你在这里 require 什么?你在这里 require src 文件夹中的 app 文件。是的,就是这样。那么,这个文件导出了什么?这个文件导出了 app。是的,就是这样。所以,当你在这里 require 时,你 require 的任何文件,并且该文件导出了什么,它就会在这里出现。现在,这里会出现什么?看看。app.js 文件导出了什么?它导出了 app。app 是什么?是服务器的实例。是的。所以,当你在这里 require src 文件夹中的 app 时,这里将 require 服务器的实例。并且服务器的实例将被保存在 app 变量中。现在,我可以在 server.js 文件中写 app.listen。端口号,我们将在这里使用的将是 3000。并且听着,你的 app.listen 方法,它不仅要求端口号,还要求一个回调函数。那么,这个回调函数是做什么的呢?这个回调函数是,一旦你的服务器启动,这个回调就会成功执行。什么意思?听着。这个方法是做什么的?app.listen。这个方法是用来启动服务器的。所以,一旦服务器启动,这个回调就会自动执行。就像,一旦服务器启动,这个回调就会自动执行。所以,看看,如果我在这里输入 node server.js。你在这里写 server.js。所以,如果我在这里写 server.js,那么 server.js 中的代码是什么?就是说,require app.js 文件在 src 文件夹中。app.js 文件从那里导出服务器实例。它在这里被 require,被保存到 app 变量中。然后,服务器在这里启动。所以,现在,如果我在这里写 node server.js,那么服务器就会启动。看看。你在 app.listen 中给了一个回调函数,对吧?回调函数中你说了什么?console.log("Server is running on port 3000")。所以,这个回调在这里运行,并且控制台输出:Server is running on port 3000。所以,这里有一个东西。所以,现在我们正在走向生产级别,非常一点点。非常一点点。大概是 5% 左右。还有 95% 没讲。生产级别的文件夹结构还有很多。这只是一个开始点。开始点。还有很多。听着。所以,我们已经创建了一个基本的服务器。现在,要做什么?我们的任务是什么?需要创建一个任务,用户可以在其中创建 Notes。用户可以查看 Notes。创建了哪些 Notes。他可以删除一个特定的 Note,并且可以更新一个特定的 Note。我们需要在这里执行这个。并且为此,我们将遵循 REST API 的原则。是的。那么,REST API 说什么?就是说,你将使用 HTTP 协议。所以,默认情况下,Express 正在使用该协议。所以,我们不必担心是否会使用 HTTP 协议。Express 默认遵循它。我们需要执行的是,我们需要实现的是什么?是方法。所以,现在,我们需要执行的第一个任务是,用户可以自己,不是自己,用户需要一个功能,让他可以创建一个 Post,不是创建一个 Post,而是创建一个 Note。所以,听着,现在需要创建一个 Note。是的,绝对需要创建。那么,他将如何创建它?或者他将如何创建它?所以,听着,我们的一个 Note,首先要理解,一个 Note 会是什么样的?所以,听着,我们的一个 Note,我们的一个 Note 将会是一个对象。它将是一个对象。并且在这个对象中,我们将有两个东西。一个将是我们的标题。标题可以有一些值。还有一个将是我们的描述。这可能是描述。所以,我们的一个 Note 将会是一个对象。对象中有两个属性:这个 Note 的标题是什么,以及这个 Note 的描述是什么。我们将在这里存储这两样东西。现在,听着,会发生什么?用户不仅仅会创建一个 Note。他可以创建多个 Notes。所以,为了存储多个 Notes,我们将在这里创建一个变量。变量的名字是 Notes。它将是我们的一个数组。并且在这个数组中,我们将存储多个 Notes。所以,这里将存储多个 Notes。所以,我们可以存储一个 Note。所以,我们可以存储一个 Note。所以,我们将有一个 Note,像这样。标题:第一个 Note。描述。然后,我们还有一个 Note。像这样。用户创建的所有 Notes,我们将把它们存储在我们的数组中。所以,这个数组将是什么?将是对象的数组。所以,听着,会发生什么?用户将要创建的 Note 将是一个对象格式。并且他可以创建很多 Notes。所以,我们将创建一个数组,并在数组中放入很多对象。所以,我们将在这里主要做这个。所以,现在我将删除它。并且在这里删除了它。我们需要创建的数组,名为 const notes。我们将其存储为一个数组。一开始是空的。并且在是空的之后,在是空的之后,现在,我需要在这里创建一个 API。并且听着,需要创建什么 API?这个 API 会做什么?这个 API 将能够让用户创建他将要创建的 Note。他可以创建那个 Note。这是这个 API 的主要功能。所以,听着,现在会发生什么?如果用户想要创建一个 Note。听着,听着,听着。如果用户想要创建一个 Note,他需要提供两样东西。是什么?用户需要在这里提供他的标题。同时,还需要提供他的描述。这两样东西都需要在这里提供。标题和描述。现在,好的,标题和描述都需要提供。是的,绝对需要提供。谁会提供这个标题和描述?用户会提供。是的,用户会提供。因为毕竟是他要创建 Note。好的?用户在哪里?用户在前端。是的,用户在前端。好的?所以,用户将提供标题和描述。从哪里提供?从前端提供。这意味着什么?从前端将有数据发送到服务器。是的。从前端将有数据发送到服务器。是的,绝对会。好的?所以,有一点。当数据发送到服务器时,REST API 上我们有什么?当数据发送到服务器时,我们需要将其发送到服务器。这次我们从哪里发送?我们从前端发送数据到服务器。是的。所以,当数据发送到服务器时,使用什么方法?使用 POST 方法。好的?所以,我们将使用 POST 方法。怎么使用?现在来谈谈。所以,看看,我们将在这里创建一个 API。它的方法是什么?将是 POST。所以,在这里,我会说 app.post。我们在这里会说。所以,app.post。并且我们在这里将要给 POST 起的名字是,将是我们的 /notes。那么,就这么多了吗?是的,就这么多了。我告诉你。在这几行中,你做了什么?听着。你在这里创建了一个 API。API 的名字是什么?/notes。这是 API 的名字。这是 API 的名字。并且这个 API 的方法是什么?POST。所以,创建方法是如此简单。说明方法是如此简单。是的,如此简单。如果你想在这里创建 GET 方法,写 .get。如果你想在这里使用 DELETE 方法,写 delete。如果你想在这里使用 PATCH 方法,写 patch。你想创建什么方法的 API,你就可以在这里使用什么方法。目前,我们想要使用的方法是 POST。所以,在这里,我们将创建一个 POST 方法的 API。/notes。现在,听着,这里会发生什么?这里会发生什么?就是说,当请求到达 /notes 时,会发生什么?因为方法是 POST。是的,方法是 POST。那么,会发生什么?数据将被发送到服务器。是的,将被发送。孩子,有一件事要告诉你。要访问从前端发送的任何数据,我之前告诉你过,你可能还记得。你可能还记得,我告诉你过一件事,什么?如果你想访问从前端发送的任何数据,如果你想访问它。
如果要做,那么你需要什么东西?你会需要一个东西。它的名字是什么?R.E.Q.,我们在这里也称之为请求。那么在这个 R.E.Q. 里面,你将会有完整的数据在这里到来。现在听着,现在听着,我们即将非常详细地讨论。如果你正在睡觉,那就醒来。醒来吧,因为现在我们要非常详细地讨论了。听着,我不会教你肤浅的东西。请记住这一点。我不会教你肤浅的东西,比如只是给你创建一个非常基本的服务器。我不会那样教你。我会教你非常好的东西。不要睡觉。你会遭受非常大的损失。这将是你的损失。如果你在这个特定的点上感到迷失,或者你在这个点上可能在思考这个视频。我不认为我教得这么好,以至于你不可能想从这个特定部分离开视频。但是,如果你的心里有一点点疑问,觉得“哎呀,我还是放弃这个视频吧”。那么请记住,如果你现在放弃这个视频,那么在德里、班加罗尔、浦那、孟买、加尔各答,可能某个地方会有人看到这个视频,并且他会学到。我保证,兄弟,任何看了这个视频的人,他都会非常精通后端。这是我自己的保证,任何看了这个视频的人,他都会非常精通后端。所以,如果你现在对这个视频有点漫不经心,那就不要这样。不要这样。这个视频对你来说足够了。用来教你一个非常好的后端。足够了。请记住这一点。
现在听着,会发生什么?因为我们在这里使用 POST 方法。我们在这里使用 POST 方法。那么我们为什么要使用它呢?为了能够向服务器发送数据。是的,当然可以发送。现在,如果我们想向服务器发送数据,那么如果数据到达服务器,为了访问该数据,我们使用什么?请求。我不是告诉过你关于请求了吗?也就是说,如果前端有任何数据传来,为了访问该数据,你会使用什么?你会在这里使用请求。是的,当然会使用。是的。那么现在你会使用请求吗?是的,当然会使用。那么数据会进入哪里?所以我先通过控制台告诉你数据会进入哪里。那么看,数据会进入 request.body 里面。数据会进入 request.body 里面。是的,数据会进入 request.body 里面。很好。是的。那么数据会进入 request.body 里面吗?当然会。是的。那么我现在就给你演示如何访问它。等一下。
看,你已经创建了这个 API。你创建了什么 API?你创建了 API。API 的名称,API 的方法是什么?是 POST,API 的名称是什么?是 /notes。你创建了这样一个 API。好的?现在我们在这里启动服务器。服务器已经启动了。但是现在这个代码是新写的,所以这个代码还没有到达它那里。旧版本仍然在运行。所以我们在这里输入 node server.js。输入 node server.js 之后,我们的服务器在这里启动了,服务器启动之后,现在我需要做什么?我需要从前端向我的服务器发送数据。那么现在如何从浏览器发送呢?你无法从浏览器发送。暂时可以发送,以后当你创建了一个非常好的前端之后。但是现在,我还没有谈论前端。所以我们正在谈论后端,当你在开发后端时需要向 API 发送任何数据时,你会在那里使用一个单独的应用程序。它的名字是什么?Postman。所以 Postman 在这里,postman.com,你现在要访问的这个 postman.com,点击它。点击之后,免费注册,或者根据你这里的机器,Windows、Apple 或 Linux,无论你的机器是什么,你都需要在这里下载 Postman。所以你在这里下载 Postman。下载 Postman 之后,安装它,安装之后它会要求你注册,那么就用 Google 简单地注册一下。
现在看,当你在这里下载 Postman 时,我非常常用 Postman。所以这里会有一个已经打开的工作区,里面有很多 API。但是我在这里创建一个新的工作区。所以创建工作区,在创建工作区里面会有一个空白工作区。请记住,你也可以创建一个工作区。空白,那么就创建一个空白工作区。我们会来到下一步。来到下一步之后,工作区的名称将是 YT Complete Backend,YT Complete Backend,然后我们可以在这里创建它。好的?好的?我们这样创建了,创建之后,我们的工作区就已经创建好了。现在创建工作区之后,现在看要做什么?Postman 是什么?Postman 到底是什么?首先稍微理解一下,Postman 到底是什么?你已经安装了。现在听着,Postman 是什么?Postman 是当我们开发后端时。我只谈论开发阶段。每当我们开发后端时,我们都会在初始阶段开发所有东西,之后将其部署到生产环境,在那里它成为一个完整的应用程序。但是,只要后端的开发阶段还在进行。在开发阶段,我们使用 Postman,Postman 充当前端,以便帮助我们开发我们在这里正在开发的这些 API。为什么我现在在这里使用 Postman?那么现在有一个简单的原因,就是我正在创建一个名为 /post/notes 的 API,我需要在这里检查数据是否会到达这个 API,以及它是如何到达的,为了做到这一点,我在这里使用 Postman。
那么听着,这里会有一个加号,创建新请求,点击它,点击之后,现在看,这里你正在使用 HTTP 协议,你也可以在这里使用其他协议,但是现在是 HTTP 协议,就让它保持原样,那么现在你会使用哪种方法?那么这里有很多方法。我们会使用哪种?我们将在这里使用 POST 方法。那么现在听着,你将要具体访问哪个?那么 localhost:3000,你的服务器正在这里运行。所以你会以它为目标。目标之后,API 会是哪个?API 的名称是什么?是 /notes。那么你会访问 /notes API。是的,当然会。那么现在听着。现在你需要访问 /notes API,但是因为你在这个 API 上使用 POST 方法,所以还需要发送一些数据。现在为了发送数据,你这里会有一个选项卡,它的名字会是什么?Body,那么来到 Body 选项卡。这将是你的原始格式。选择原始格式。选择原始格式之后,你在这里会选择一个选项。现在请注意一件事。完全有可能这里选择了 Text。但是在这里,你将选择的那个,它的名字会是什么?JSON。所以你需要在选择 JSON。如果你不选择 JSON,那么可以尝试锁定,数据将无法到达那里。
现在听着,会发生什么,你在这里要做的是,我们需要在这里发送两样东西。什么?我需要在这里发送一个 Title,Title 的值我现在在这里也给它什么?我在这里给它值 Test_Title。现在听着,你已经给了 Title。给出 Title 之后,你在这里再给一个 Description,Description 会是什么?你的 Description 将是 Test Description。你将在这里放置 Test Description。所以 Test Title 和 Test Description,这两样东西你需要放在这里。现在这是怎么回事?听着。那么这个第一个格式是什么?看,你在这里看到的这个格式,它看起来像一个 JavaScript 对象。但是它是什么?这是一个 JSON 格式。在 JSON 格式中,你给的任何键也将是字符串格式。你给的值也将是字符串格式。如果它不是数字,那么如果需要给数字,你可以像普通数字一样给出数字。但是如果它不是数字,那么任何值都将是字符串格式。在 JSON 格式中,键也是字符串格式,值在这里也是字符串格式,其余部分像普通对象一样工作。那么现在听着,你已经给了这些值。现在听着,会发生什么?你将从 Postman 发送一个请求到你的后端服务器,它正在你的机器上端口 3000 上运行。那么你是在哪里说的?在这里说的。也就是说,看,你在 Postman 里面写了 localhost:3000,这意味着什么?就是说,在本地机器上端口 3000 上运行的任何服务器,它有一个 /notes API,其方法是 POST,我们正在向它发送请求,并且在发送请求的同时,我们正在请求中发送一些数据,数据中我们有什么?Title 和 Description。我正在这里发送这两个数据。
那么看,现在如果我发送它,就不会有任何响应。为什么不会有任何响应?因为你还没有从这个 API 发送任何响应。因此不会有任何响应。但是这个 API 收到了请求。当然收到了。为什么?因为看,你的这个服务器正在哪个端口上运行?在 3000 上。而你在 Postman 上向 localhost 端口 3000 上运行的服务器发送了请求。API 是哪个?是 /notes。是的,这就是你的 API。方法是什么?是 POST。那么看,你在这里用 POST 方法创建了 /notes API,所以请求应该已经到达它,如果请求到达它,那么这个回调函数应该已经运行了,在这个回调函数里面我们打印了什么?request.body,是的,当然打印了,那么如果打印了,发生了什么?这里出现了 undefined undefined,好的,我们再试一次,取消了,再次发送请求,发送之后又出现了什么?undefined,那么我们再试一次。好的?再次发送了一次。这里又出现了什么?出现了 undefined。那么我们是不是犯了什么错误?不。至少从 Postman 方面来看,我们没有犯任何错误。Postman 方面没有错误。Postman 正在正确地发送数据。Postman 方面没有错误。那么错误在哪里?我们现在正在编写服务器程序时犯错误。
怎么回事?就是看,每当你需要数据在 request.body 中时,你就需要在这里使用一个中间件。中间件是什么?那么中间件就是一些东西。在它之后的第二、第三部分,我会非常详细地解释。但是现在,需要使用一个中间件。那么中间件会是哪个?中间件的名字将是 express.json。那么 express.json 是一个中间件。是的,这是一个中间件。那么如何使用它呢?为了使用它,你需要这样写它。怎么写?在这里你需要写 app.use,然后在括号里面,你在这里会写 express.json。那么这个中间件是做什么的呢?它会传递这个,就是说,你从 Postman 以原始格式发送到 Body 里面的任何数据,它会在这里使这个数据对 Express 来说是可读的。也就是说,默认情况下,Express 无法读取 Body 里面将要到来的任何数据。它做不到。它没有那么大的能力,就是说你用 Express 创建的那个服务器,它无法读取 Body 里面将要到来的数据。它没有那么大的能力。你的这个 express.json 中间件,这个中间件会给 Express 服务器添加这个能力,让它能够读取 Body 里面到来的任何数据,那么现在看,我们再次关闭服务器,然后我们在这里用 node server.js 启动它,所以我们在这里启动了 server.js,如果再次回到 Postman,这里没有做任何改变,我将直接在这里点击发送,发送之后,现在看,这里看,看,看,看,这里发生了什么?这里来了一个对象。对象里面有一个 Title 属性。哪个属性?Description。Title 的值是什么?Test Title。而 Description 的值是什么?Test Description。那么现在 request.body 里面我们收到了什么?request.body 里面我们收到了一个对象。对象里面有两个属性。Title 和 Description。而这正是我们想要的。
那么现在看,这个进入 request.body 的对象。我会把它推入 notes 数组里面。那么 notes.push,在 push 里面,request.body 里面的任何数据,我都会在这里推入,并且我们在这里使用 response.status 201。现在 201 是什么,你现在可能收到了一份 PDF,我给了一份 PDF,你稍微读一下那份 PDF,看,我告诉你,这份 PDF 你会在描述中找到,那么这份 PDF 中有一个关于状态码的部分,就是这个状态码,HTTP 状态码,那么在这里常见的状态码中,201 将是其中一个状态码。它的类别是什么?就是说你的工作已经成功完成了。它是为此而做的。那么描述是什么?描述是,每当在后端创建一个新资源时,就会在这里使用状态码 201。并且还有其他像它一样的状态码,你将在这里收到的 PDF 中。你可以在这份 PDF 中阅读。这将是同一份 PDF。PDF 看起来可能有点不同,但其内容在这里将是相同的。所以这里还有很多其他状态码。但是我们现在主要在这里看到的状态码是哪个?201,我们使用 201 状态码是在我们正在后端创建一个新资源时。那么我们在哪里创建新资源?正在创建。听着,听着,我们在做什么。我们在这里,当我们启动服务器时,当时我们的 notes 数组是空的。这个 notes 数组是空的。但是当一个请求从前端到达我们这里,请求到达之后,request.body 中到来的数据,我们把它推到哪里了?推到 notes 数组里面了。意味着什么?就是说,之前 notes 数组是空的,现在里面已经有了一个新元素。也就是说,里面创建了一个新元素。创建了一个新节点。那么就是说有什么东西来了,对吧?这里来了些新的东西。在 notes 数组里面创建了一些新的东西。那么我们在这里称之为资源。那么资源在这里创建了。因此,我们在这里使用什么状态码?201。并且通常我们再次在响应中发送的消息是 JSON 格式的。那么为了以 JSON 格式发送消息,我在这里会说 message,并且在服务器上你不需要在这里以字符串格式给出任何东西。Note Created Successfully。你可以很容易地在这里粘贴这些。那么我们的状态码会是什么?201,我们在这里发送 JSON 格式的消息。Note Created Successfully。那么现在看,我们再次重启服务器。重启之后,我们启动了 node server.js。启动之后,现在如果我来到 Postman。我点击发送。那么发送之后,看,这次我的响应中收到了什么?消息 Note Created Successfully。并且创建笔记之后,现在这里发生了什么?听着。听着。你正在从前端发送请求。你以原始格式在 request.body 中发送了 Title 和 Description 两样东西。request.body 中到来的数据应该是对象格式的。并且到来的任何对象,你把它推到哪里了?推到 notes 数组里面了。那么就是说 notes 数组里面会有一个对象,里面会有两个属性。哪些属性?Title 和 Description。你把这两样东西都推入了数组里面。推入之后,就是说你已经在你的后端服务器上创建了一个笔记。然后你在这里的状态码中会说 201,表示创建了一个新资源。并且你会以 JSON 格式发送一条消息,什么?就是 Note Created Successfully。你将在这里做这些。
现在听着。那么我们有一个 API,用户可以在那里创建一个笔记。可以在我们的服务器上存储。我们已经创建了它。现在我们在这里再创建一个 API。这个 API 会是什么?就是说用户创建的所有笔记,他都可以在那里看到所有这些笔记。那么现在为了做到这一点,我们在这里使用哪种方法?看,现在要做什么?听着,听着,听着,听着。现在要做什么?要听哪个 API?仔细听。听着。看,我们需要在这里创建一个 API。如果用户使用这个 API,那么他在服务器上创建的所有笔记,他都可以在前端看到所有这些笔记的数据。如果我听着,现在如果我需要在前端显示后端创建的所有笔记的数据,那么我需要从服务器将该数据发送到前端。你总会同意,如果我需要在前端显示任何数据,那么该数据首先应该到达前端。并且那个数据现在在哪里?在服务器上。所以我需要从服务器将数据发送到前端。并且听着,当我们需要从服务器向前端发送数据时。使用哪种方法?GET。那么当需要从服务器获取数据时,我们使用什么?我们在这里使用 GET 方法。那么现在看,我们现在在这里创建一个 API。API 的方法会是什么?API 的方法将是 GET。并且 API 的名称仍然是 /notes。哎呀,这怎么回事?也就是说,你没明白。看,这里 API 的名称也是 /notes。这里 API 的名称也是 /notes。是的,我什么时候说它们不同了。它们都是一样的。那么不同的是什么?不同,对吧?方法,方法不同。看,你在这里创建的那个 API,它是 POST 方法。
是。为什么?因为数据是从前端发送到服务器的。但是在这里你使用的方法是 GET 方法。为什么?因为在这里通过这个 API 数据是从服务器发送到前端的。所以这里 API 的名称完全相同,但是方法不同。因此,这两个 API 在这里是不同的。那么它的方法是什么?是 GET,API 的名称是什么?是 /notes。很好。
那么现在看,每当这个 API 收到请求时,我们在这里会做什么?我们在这里会发送响应状态 200。而 200 里面,200 是做什么的?确切地读一下,就是说,给的 PDF 要好好读一下。在这里我们会说,如果我来到这里,那么 notes notes 无论我们有什么,我们在 notes 中发送什么?在 notes 中,我们把这个数组,这个数组是什么?在这个数组中,我们存储了所有我们拥有的 notes。所以每当 GET API 收到请求时,所有保存在我的 notes 数组中的 notes,我都会一次性地在响应中发送出去。同时,我还会发送一个消息,说 notes 获取成功,我们也会在这里发送这个消息。
那么现在看,因为这段代码也是我们刚刚新添加的,所以我们再次启动服务器。启动之后,输入 node server.js,回车。回车之后,服务器重启了。回到 Postman。所以这是我们的 Postman。我们创建一个 note。note 创建成功。我们创建一个 API。它的方法将是 GET。localhost:3000/notes。所以看,API 仍然相同,但是这里的方法不同。
那么现在看,当我向这个 API 发送请求到我的服务器时,这个请求会去哪里?这个 API 会去。选择了哪个方法?选择了 GET 方法。那么 /notes 的 GET 方法的 API,就是这个 /notes 的 GET 方法的 API,请求会发送到这个 API。那么如果请求发送到这个 API,我将收到什么响应?状态码 200,以及 JSON 格式的一个消息,notes 获取成功,以及所有我创建的 notes 的数组将在这里出现。
所以看,我刚刚在这里创建了一个 note,对吧?那么那个 note 将在这里出现。看,有一个消息,消息:notes 获取成功,notes 是什么?notes 是一个数组,这个数组里面有一个对象,标题:测试标题,描述:测试描述。好,再创建一个 note 吧。那么我们在这里再创建一个 note。在这里我们会说 _2 _2。发送了它。发送之后,note 创建成功将在这里发生。看,现在已经创建了两个 note。如果我现在获取这两个 note,那么看,我收到了一个数组,但是数组里面现在有两个对象。两个对象里面都有一个标题和一个描述。
所以如果你现在看,我这里有两个 API。我这里现在有两个 API。一个方法是 POST。通过这个特定的 API POST 方法的 API,我可以创建 note。通过 GET 方法的 API,所有我在服务器上创建的 note,我都可以再次获取。我可以在这里执行这个操作。
那么听着,现在我们已经完成了两个 API。现在我们需要再创建一个 API。这个 API 将是什么?就是你想要删除的任何特定的 note,那个 note 应该被删除。为此我们将使用什么?使用 params 的 index。那么这两者有什么区别?听着。发生了什么?听着。你现在存储的 notes,你现在存储的 notes,是这样存储的:你有一个数组,这个数组里面有 note 1,note 2,就这样,你有一些数据。假设这里你有一个 note 1,在这个数组里面,对吧?这是我们的数组,那么数组里面我们有 note 2。然后就这样,所有你拥有的 note 都会以数组的格式存储在这里。
那么听着,你在数组中存储的任何东西,所有这些元素都有一个编号。所以这里我再存储一个,只需要一个元素,note 4。好的?那么我们这里又有一个元素了。好的?那么看,我们有 note 1,note 2,note 3 和 note 4 这些元素。现在你在数组中放置的任何元素,所有这些元素都有一个索引。例如,note 1 的索引将是 0。然后 note 2 的索引将是 1。note 3 的索引将是 2。note 4 的索引将是 3。所以这里有三个元素,这三个元素将有不同的索引。note 1 的索引是 0,note 2 的索引是 1,note 3 的索引是 2,note 4 的索引是 3。
那么听着,可能会有很多 note,可能有 100 个 note。它们的索引也会在那里。举例来说,现在我们只取这么多。那么听着,发生了什么?现在看,假设如果我需要删除一个 note。如果我在这里需要删除 note 3,那么我只需从前端说,删除索引为 2 的 note。如果我查看索引为 2 的 note 是哪个,它是 note 3。那么我将在这里删除 note 3。这就是这里将发生的故事。如果我需要删除 note 4,我将说索引 3,删除索引 3,note 4 将在这里被删除。我将在这里做这些。我希望你已经明白了我要怎么做。我将只从前端说,删除这个特定索引上的任何 note,那个 note 将从那里被删除。这是我们在这里需要做的。
现在为了做这些,看我们需要做什么?我们需要删除 note。听着,当我们需要删除一个 note 或服务器上的任何东西时,我们使用什么方法?我们在这里使用 DELETE 方法。所以服务器上有数据,需要删除它,我们在这里将使用 DELETE 方法。那么来到这里,创建一个 API。API 的方法是什么?API 的方法将是 DELETE,它的名称将是 /notes,这里将有一个 index。那么这个冒号 index 是什么?我们在这里将讨论这个。听着。
那么看,我们在这里创建一个 API。app.delete 这是我们 API 的方法。API 的名称将是 /notes 和 /index。之后会有一个回调函数。我正在说,我正在说这个 index 是什么?请等两分钟。等两分钟,我正在说这个 index 将是什么。那么听着,现在假设我需要删除这个 note 2。它的索引是什么?是 1。那么现在我将在这里调用的 API,我将在这里调用的 API 将是什么?那个 API 将是使用 DELETE 方法的 /notes/1。那么现在这里的 index 是什么?是 1。那么我将删除索引为 1 的任何 note。同样地,如果我需要删除 note 4,它的索引是什么?是 3。那么在这里我将说什么?我将说 3。我将在这里说这个。同样地,如果我需要删除 note 3,它的索引是什么?是 2。那么在这里我将说 2。除此之外,如果我需要删除第 100 个 note,那么在这里我将输入什么?我将输入 99。那么这将是我们的。如果我需要删除第 15 个 note,那么我将在这里输入 14 作为索引。
这是一件事。现在从这件事你只需要理解一件事。也就是说,从整个场景中你只需要理解一点:/notes/ 这个部分是静态的。这是静态的,它没有改变。改变的是什么?是这个部分,有时是 1,有时是 3,有时是 14,有时是 99。那么斜杠后面的这个部分是什么?它是动态的。/notes/ 这是静态的,但是斜杠后面来的这个部分是动态的。那么在路由中,动态的部分我们称为什么?我们称它为 params。我们称它为 params。那么如果你需要告诉你的 Express 应用程序,/notes/ 这是静态的,它将是默认的,但是这个斜杠后面的部分是动态的,那么你只需在这里告诉它,写上冒号。那么写上冒号会发生什么?写上冒号的好处是 Express 应用程序会知道,冒号后面来的任何东西都将是动态的。
好,那么它将是动态的。如何访问它?那么听着,现在看,你在这里斜杠后面写了冒号,然后冒号后面你写了什么?index。那么在这里会发生什么?现在斜杠后面来的任何值,假设这里的值是 1。我需要知道这里确切的值是什么?为此你将写,不是这样写,如果你需要知道,那么简单的方法是 request.params.index。通过这个 request.params.index 你可以知道这个 index 的位置是什么值,以及这里将来的任何值,你都可以将其保存在 index 变量中。那么这个 index 变量的名称应该是 index 吗?不,你可以随意命名,比如 mama chacha。但是你可以取任何名字,就是这样。
那么听着,现在会发生什么?看,如果这里是 /notes/1。/notes/1。那么这里的 index 的值将是什么?index 的值将是 1。如果这里是 /notes/34,那么这里的 index 的值将是什么?将是 34。同样地,如果这里是 15,那么这里的 /index 的,这里的 index 的值将是什么?这里的 index 的值将是 15。如果理解的话,它就是这样的:现在这里将来的任何动态部分,动态的任何东西都可以来。这里动态的任何东西都可以来。这里来的任何值,你都可以通过 request.params.index 访问它。以及这里来的任何值,你将把它保存在哪里?保存在 index 变量中。
现在看,任何 index,假设我们这里现在 index 的值是 1。那么这里存储在 index 中的将是什么?将是 1。那么我现在需要做什么?我需要删除这个数组,我这里的这个数组的索引 1。这是我的整个 notes 数组。在这个 notes 数组中,出现的索引 1,我需要删除它。为了做这些,我需要做什么?我需要写一个简单的行。哪一行?你可以在这里写 delete。在 delete 中你将说,不,不是 delete,是 notes 的 index。在 notes 的这个特定索引上坐着的任何 note,删除那个特定的 note。你只需要在这里写这些。然后你可以在这里发送 response.status 200。在 200 之后你将在这里发送 JSON。JSON,在 JSON 中你可以在这里发送消息:note 删除成功。你可以在这里在响应中发送这个消息。
那么看,现在会发生什么?现在这个部分你会觉得有点复杂。但是相信我,一旦你尝试过,一旦你亲自尝试过这段代码,这个 API,通过控制台查看 index 的值,所有这些都会被控制台输出。这将在这里发生。所以只需尝试一次,你也会明白这个。只需练习,你也会明白这些事情。会觉得有点复杂,但不会觉得非常复杂,我知道。
那么现在看,我们再次调用这个 API。首先,为了调用它,我们需要再次启动服务器。node server.js 我们在这里写了。写完 server.js 之后,现在听一件事。听一件事,你可能会觉得很烦人。就是你在这里写的任何代码,为了再次更新它,你都需要写 node server.js。所以有一个解决方案。什么?有一个命令。命令的名称是什么?npx nodemon server.js。那么这个命令会做什么?它会正常启动你的服务器,但是它有一个特点:如果你的任何 JavaScript 文件,你的任何 JavaScript 文件,哪怕有一点点改变,如果我在这里甚至按一下回车键,它就会再次知道 JavaScript 文件中发生了一些变化。所以一旦它知道 JavaScript 文件中发生了一些变化,它就会再次重启服务器,并用你那里最新的代码重启你的服务器。这是一件事。所以如果你非常恼火,非常沮丧,就使用这个命令,你的工作就完成了。
那么听着,回到 Postman。首先,我们在这里创建两个 note。所以我们创建了一个 note。我们现在应该有一个 note。是一个单独的 note。我们在这里再创建一个 note。_2 和 _2。我们发送了它。那么现在我们这里应该已经创建了两个 note。两个 note 已经创建了。现在我在这里创建一个 API。它的方法我们将设置为 DELETE。DELETE 之后,localhost:3000/notes。现在我需要删除的。看,我这里现在有两个 note。那么这个 note 的索引将是 0,这个 note 的索引将是 1。那么现在假设我需要删除这个位于第 0 个索引的 note。那么在这里我可以写 /notes/0。看,我写了什么?我在这里写了 0 /notes/0。现在如果我发送它,那么看,发送了。发送之后,我收到的响应是什么?note 删除成功。
现在如果我借助 GET API 再次发送响应。看,第一个 note 的位置现在是什么?是 null。然后这里我们仍然有第二个 note 正常出现,因为你没有删除第二个 note。那么我们在这里删除时给的索引是什么?是 0。那么位于第 0 个索引的任何 note 都被删除了,它的位置变成了 null。现在看,我需要删除第二个 note,那么我需要给出什么索引?需要给出 1。发送了它。那么现在我的 note,那个第二个 note 也将被删除。
所以如果你现在看,你已经做得相当不错了。什么?因为到目前为止,你已经学习了 REST API 的四个重要方法中的三个。哪些?你已经学习了 POST 方法,就是说如果你需要向服务器发送任何数据,你将使用 POST 方法。GET 方法,当你需要从服务器获取任何数据时,你将使用 GET 方法。以及 DELETE 方法,当服务器上已经存在数据,并且你需要删除那个数据时,你将在这里使用 DELETE 方法。到目前为止你已经完成了这些。
这是一个很好的进展,这是一个很好的进展,兄弟们。这是一个非常好的进展。就这样继续前进。可能会觉得有点难,但是我知道不会觉得那么难。如果觉得难,那就不应该觉得难。只需练习。现在就练习。现在就练习。我已经告诉过你,我在这段视频中讲的任何内容,你至少要做两次。你至少需要做两次,这样你才能很好地掌握它。所以只需做两次这些事情,我向你保证,事情会变得非常非常容易。
后端并不难。后端不知道为什么在媒体上,在社交媒体上形成了一个印象,说后端很难,很复杂。不,不难,一点也不难。你只需要理解一些概念,而这些概念我会在这个视频中解释给你听。我也会在这个视频中解释所有这些概念给你听,你也会理解它们。只需不要害怕后端。如果你有疑问,我们有一个 Discord 群组。我们有一个 Discord 服务器。是的,那也是一个服务器。所以我们在 Discord 上有一个服务器。加入它。你也会在这里找到它的链接。加入那个链接。那里也有我们一个非常好的社区。Code One 的学生,我们课程的学生也加入了那个服务器。所以他们也会帮助你,因为他们已经在课程中学习了所有这些东西。所以你也可以问他们,他们会在那里帮助你。如果你去通用聊天室,他们也会在那里帮助你。所以你也可以在我们的 Discord 群组,Discord 服务器上提问。兄弟们,只需注意一件事,不要放弃。有时会遇到一些问题。
会。当然会,伙计。你在这里不是在做十次后端操作。你可能是第一次做。我想最多是第一次或第二次。所以,伙计,如果你是第一次做,任何事情第一次做都会觉得很难。这时我的工作就派上用场了,那就是让它变得容易一些。所以我正在做这项工作。只需要注意一件事。但即便如此,如果你是第一次做,还是会有点困惑。会觉得复杂。也会觉得有点难。但伙计们,不要停,不要放弃。一旦你停下来,一旦你放弃了后端,它就回不来了。后端就回不来了。所以伙计们,去做后端吧,它真的能帮你实现你想要的一切。这是一项不是人人都能掌握的技能,但我知道你可以做到。真的,伙计,只要我还在教你,只要 C-Series 还在你身边,只要你不放弃,只要你下定决心说“不,伙计,我一定要做后端”,后端就会实现,请记住这一点。我自己在做后端的时候也下过决心,我下过决心说“不,伙计,我一定要做后端,我一定要做后端”。所以我自己下过决心,只要保持你的决心,伙计们,无论如何都不要放弃后端,不要放弃后端,它就会实现,并且你可以通过后端实现很多很多东西。你很快就会看到这个频道上有很多关于后端的东西要来了。所以关注这个频道吧。还有,我也会告诉你用后端还能做什么。回到我们的学习时间。所以,到目前为止,我们已经看了四种方法中的三种。Get、Post 和 Delete。我们在这里谈论 Patch 方法。那么,我们为什么要在这里使用 Patch 方法呢?数据已经在服务器上,我们在这里使用 Patch 方法来更新这些数据。那么,现在我们在这里做什么呢?我们将更新一个特定的节点。我们将更新一个特定的节点,那么我们将如何做到呢?所以,听着,我们将再次使用索引。假设我想在这里更新 Note 3 的描述。我需要更新的 Note 3 的描述,那么我将如何做到呢?我在这里会说,伙计,更新那个坐在索引 2 上的节点,更新那个节点的描述。我将这样做。我正在用非常高层次的方式解释。我知道。但就是这样。我将完全这样做。怎么做?听着。所以,我们来到这里。我们将创建一个 API。app.patch,然后在 patch 中我会说 /notes/:index。我需要更新的任何节点的索引都会在这里。索引将在这里。然后我们有请求和响应。现在,我将收到的描述,我将收到的描述将出现在 request.body 中。通常数据会出现在 request.body 中。所以,我将提取 request.body 中的数据。但在此之前,我将在这里提取我收到的索引。所以我提取了索引。提取索引后,我将收到的描述。那么描述会出现在哪里?描述会出现在 request.body 中。request.body 是一个对象,而在对象中,我们将得到描述。所以,request.body.description。我将这样提取描述。最后,我将在这里说,在 notes 中,更新这个特定索引上的节点,更新它的描述。更新后,我们将发送 response.status 200,然后以 JSON 格式发送数据,消息“Note updated successfully”。我们将发送这个。所以,这很简单。看看会发生什么。描述会出现在 request.body 中,是的,它会出现。它需要从前端发送给我们。而需要更新的节点将在这里出现。所以,你看,你需要更新的任何节点,你都会在这里通过路由中的参数在 API 中说明,你需要更新哪个节点,它的索引是什么。你需要发送你想要更新的描述到 request.body。所以,你提取索引,是的,坐在 notes 上的这个特定索引上的节点需要被更新,并且它的描述需要被更新。而你将在这里设置任何描述。设置后,response.status 200,JSON 格式的消息“Note updated successfully”。我们将在这里共享这些。我们将在这里这样做。所以,现在你已经创建了这个。而且因为我们在这里使用了 nodemon,这个代码应该会自动重启并开始运行。所以,我们来到 Postman。现在,因为服务器重启了,你不会剩下任何一个节点。我会告诉你为什么会这样。但我们来到这里。创建一个特定的节点。我们在这里创建两个节点,而不是一个。所以,我们创建了一个节点。这个将是我们的另一个节点,_2。我们发送了它。发送后,_3,_3,我们在这里发送。所以,现在如果我们在这里看,我们总共创建了三个节点。Test Title、Test Title 2 和 Test Title 3。我们创建了三个节点。我们现在不删除,因为伙计,节点已经很少了。所以,我们将使用 patch 方法更新一个特定的节点。我们将要更新的节点是 localhost:3000/ 坐在索引 2 上的那个。也就是说,我们最开始的那个。所以,/notes/我们的索引。坐在索引 2 上的那个节点需要被更新。并且为了更新,在 body 中,以 raw 格式,我会说什么?Description。而我将在这里说 Description。更新的描述。我将在这里说更新的描述。所以,现在我有三个节点,其中这个节点坐在索引 0 上。这个节点坐在索引 1 上。而这个坐在索引 2 上。所以,现在如果我们在这里谈论,我将在这里更新索引 2。我将更新坐在索引 2 上的节点。而它的描述将被更新为?我在这里更新的描述。好的?所以,如果我发送这个,这里有什么?Note updated successfully。而现在如果我在这里看,这里有什么?我在这里得到了更新的描述。好的,所以节点已经更新了。好了。那么,如果我想更新这个特定的节点呢?它的索引是什么?它的索引是 0、1。它的索引是 1。好的?所以,我们来更新这个节点,并将其命名为 Updated Description 2。我在这里给它命名。发送。描述应该已经更新了。而现在,如果你在这里看,它在我们这里是 Test Description 2。如果我发送它,更新的描述 2 将在这里出现。好的。如果我想更新标题呢?那么,我们在这里尝试一下。所以,伙计,如果我想更新标题呢?那么,我能更新标题吗?更新的标题。发送。Note updated successfully。它已经完成了。是的,它完成了。但现在,如果你在这里看,任何东西的标题都没有更新。为什么会这样?这是因为你没有对服务器进行编程,使其能够更新标题。也就是说,也就是说,你看你在这里写的代码,它在做什么?它只从 request.body 读取描述,并且只更新描述。你在这里写过标题吗?如果你想更新标题,你也需要在这里进行编程。伙计,你如何更新标题?你也需要在这里进行编程。所以,你对服务器进行编程做什么,服务器就能做什么。除此之外,它什么也做不了。所以,很多事情都需要编程。是的,我们将在视频中这样做,我也会在那里教得很好。所以,现在,随着 Patch 方法,这四个重要的 API 已经完成了。而我们的任务也完成了。这个任务有一个问题。问题是什么?听着,一旦我们的服务器,一旦我们的服务器,我关闭它一次,然后重新启动它,你看会发生什么。你创建的 Notes 都消失了。为什么会这样?这是因为你看,你存储的 Notes,你存储的 Notes 数据,它存储在哪里?在一个特定的变量中。变量名是什么?Notes。所以,变量是程序的一部分。你写的这个服务器程序,它是一个服务器内的变量。变量名是什么?Notes。是的,就是这样。那么,我们的程序是在什么里面运行的?它由处理器运行。但运行时存储在哪里?它存储在 RAM 中。是的,它存储。所以,你创建的变量,变量的值也存储在哪里?它存储在 RAM 中。那么,会发生什么呢?一旦你关闭服务器一次,程序就停止运行了。处理器停止运行它。是的,它停止了。所以,一旦处理器停止运行它,它正在运行的 RAM 也会被拿走。好吧,既然你不再运行了,你就不能再使用 RAM 了。清除它。它已经移走了。那么,RAM 中还有其他东西吗?是的,Notes 变量正在存储它的值。是的,它正在存储。那么,会发生什么呢?一旦 Notes 变量的值所在的 RAM 被清除,它就消失了。那么,当你的服务器下次启动时,它会得到一个新的 RAM。那么,Notes 或可以说 nodemon。那么,当你的服务器下次启动时,服务器会得到一个新的 RAM。而这个新的 RAM 中不会有旧的值。为什么?因为它是随机分配的。RAM 的全称是什么?随机存取存储器。它是随机分配的。所以,旧的值,Notes 存储其值的那个 RAM 已经消失了。所以,这次会有新的 RAM。所以,新的 RAM 将以 Notes 的初始值存储。但现在问题是,每次服务器关闭一次,而服务器存储的数据就会清除,这难道不会每次都发生吗?它不会每次都发生。我们承受不起。问题是。所以,我们在这里使用什么?数据库。数据库提供了功能,你可以将你的数据存储在它们那里。即使你的服务器关闭一次,然后重新启动,你的数据仍然不会在那里丢失。因为你在使用数据库。那么,数据库是什么?数据库只是一个存储数据的地方。如果你在那里存储数据,即使你的服务器关闭了,你的数据也不会丢失。你可以从那里检索你的数据。这就是为什么我们要在这里学习数据库。现在,我们将如何设置数据库?数据库还有什么其他概念,我们也需要在这里理解。它已经消失了。现在,让我们继续设置数据库。好了,现在我们要在这里启动数据库。那么,数据库到底是什么?在那里,你将存储你将要创建的服务器的数据。即使你的服务器重启一次,你的数据仍然会安全地存储在那里。它不会从那里丢失。这就是为什么我们在这里使用数据库。现在,如果我谈论数据库,有很多数据库。有很多不同类型的数据库。在 MERN 中,也就是说,我们现在正在学习后端。现在,我们将要使用的是什么?它将是 MongoDB 数据库。现在,我们必须在这里使用 MongoDB 数据库。那么,我们将如何做呢?我们将去 MongoDB 的网站。去 MongoDB 的网站。然后创建一个集群。那么,集群是什么?我们将在 2 分钟内非常详细地学习它。听着。所以,我们需要创建一个集群。然后,在那个集群中,我们将创建我们的数据库。而在那个数据库中,我们将存储我们的数据。所以,这是一个主要想法。去 MongoDB 的网站。去 MongoDB 的网站。创建一个集群。集群是什么?我将在 2 分钟内告诉你。然后,我们将在集群中创建数据库。这将是我们的。所以,现在,我们先来到 MongoDB。所以,你可以在这里搜索 MongoDB 的网站。你可以搜索 mongodb.com。你来到 mongodb.com。来到 mongodb.com 后,你可以在这里登录。所以,点击登录按钮。点击登录按钮后,继续使用 Google。继续使用 Google 后,这是我的一个账户。我将继续使用这个账户。所以,继续。然后继续。我已经创建了账户。所以,它不会问我两三个问题。如果你是第一次来这里,它会问你。所以,会有三个或四个问题。答案会在下拉列表中。你可以读一次,然后根据你的想法给出一个合适的答案。没有什么大不了的。如果你在那里给出了错误的答案或不同的答案,它不会创建什么别的东西。只要回答,就可以了。现在,你看,这个页面不会像这样打开。我告诉你,你会看到什么。所以,我在这里创建一个新项目。或者你不需要这样做。我需要创建项目,因为我已经创建了很多项目。所以我在这里创建一个全新的项目。所以,YT Complete Backend。我们完成了。下一步。所以,将创建一个项目。创建项目可能需要一点时间。但项目创建得很快。与集群相比。所以,你看,我们在这里创建了一个项目。项目名是什么?YT Complete Backend。现在,我们将在这里看到一个选项:创建集群。那么,这个集群到底是什么?所以,如果我给你一个集群的简单定义,它是什么?它是一台机器。它是一台真正的物理机器。我们可以配置它,说,有多少 CPU,有多少 RAM,以及有多少存储在那里。现在,我们的集群,集群是什么?一台物理机器,里面有多少 CPU,多少 RAM,以及多少存储,我们可以配置。现在,MongoDB 给了你选项,让你自己配置。但它也会收取费用。所以,如果你在这里搜索 MongoDB 定价,搜索 MongoDB 定价后,你会在这里找到一个 MongoDB 定价网站。点击它。点击后,MongoDB 的任何定价。这里有一个免费选项,它说,这永远是免费的。它也有一些层级。我们应该选择这个。但 MongoDB 也提供了一些定价。我们也会在这里看到。所以,如果我来到查看专用定价。MongoDB 为我们提供了很多计划。从 M10 开始,一直到 M700。如果你需要更高,那么你需要定制。你需要联系他们。但如果你看 M700 有多少存储?4000 GB。768 GB RAM。96 个 CPU。定价也相应地设置。也就是说,你每小时需要支付 33.26 美元。所以,你使用的资源越多,你需要支付的 MongoDB 价格就越高。如果我来到 M10,那么它将有 10 GB 的存储。2 GB 的 RAM。2 个 CPU。它的价格是每小时 0.008 美元。所以,你的集群,集群是什么?集群是你指定机器配置的地方。也就是说,是的,将有多少 CPU,两个 CPU。10 GB 的存储。2 GB 的 RAM。所以,你用配置创建的机器。但相应地,你需要支付 MongoDB 的价格。现在,听着。我们不会使用任何付费计划。我们在这里创建一个集群。我们将在这里创建一个集群。但我们将创建哪个集群?我们将在这里创建一个免费集群。所以,我们选择了免费集群。选择后,集群名。如果你想,你可以在这里给集群命名。我可以称之为 YouTube Complete Backend。你可以称之为 Backend。
你可以用名字来命名它。然后,我们拥有的提供商有 AWS、Google Cloud 和 Azure。这三家是我们拥有的提供商。现在,我们在这里选择的是哪个?是我们的 AWS。我们选择的区域是哪个?是孟买。好的,除了孟买,我们还有其他选择吗?是的,当然,我们这里还有其他一些选项。例如,有首尔、香港、新加坡、东京。然后,如果谈论美国,有北弗吉尼亚、俄勒冈,然后是斯德哥尔摩。所以,有很多选项可供选择。但是现在我在这里会选择哪个选项?孟买。那么,好的,如果我在这里选择孟买选项,会发生什么?听着,你将创建的这个集群,这个集群会在哪里创建?MongoDB 的一个服务器,等一下,我们不是在谈论数据库吗?MongoDB 是一个数据库。是的,MongoDB 是一个数据库。但是数据库也属于一种服务器。好的,那么我们总共有多少种服务器?如果我谈论这个,那么看看服务器的类型,如果我在这里谈论服务器的类型,那么服务器的类型。
现在,如果我们在这里看,我们有多少服务器?我们有一个 Web 服务器,用于托管网站,我们正在用 Express 创建的这个服务器就是我们正在创建的。这些是我们的 Web 服务器。然后我们有邮件服务器,用于电子邮件。它们会发送电子邮件。文件服务器用于数据存储,如果你想存储任何文件,你可以存储在文件服务器上。然后我们有什么?数据库服务器,用于数据管理应用程序。所以,我们有这样一种类型的服务器。有各种各样的服务器。我们在这里学习创建一种类型的服务器。它的名字是什么?Web 服务器,我们正在用 Express 创建的。还有一个服务器是数据库服务器。那么 MongoDB 做了什么?听着,MongoDB 在这里做了什么?MongoDB 的这个网站,也就是说,MongoDB 在这里创建了许多数据库类型的服务器,并且没有在一个地方创建,也就是说,在一个物理位置创建。你在这里看到的这么多选项,在首尔创建了,然后在香港创建了,在新加坡创建了,在东京创建了,在北美洲的北弗吉尼亚、俄勒冈、奥格恩,然后是斯德哥尔摩、爱尔兰、巴黎。MongoDB 在这么多地方部署了它的服务器。现在,我在这里要创建一个集群,这个集群会发生什么情况?这个集群会创建。它肯定会创建。但是,MongoDB 在孟买的这个服务器,这个特定的集群将会在那个孟买服务器中创建。然后,在这个集群中,我可以创建我进一步的数据库。请记住,在 MongoDB 中,你必须先创建一个集群,然后在集群中创建你的数据库。所以,你在这里选择了孟买,选择了孟买之后,这里会有一个按钮,创建部署。所以,在最底部,你有一个按钮,创建部署。点击它。点击之后,你的集群就会开始创建。所以,这里创建了一个用户。我们可以暂时忽略它,因为我会告诉你我们该怎么做。所以,我们的集群,集群正在这里创建。所以,我们需要等待一会儿。一旦我们的集群创建完成。我们需要进入下一步。我们下一步要做什么?我们需要配置两件事。现在听着,你的集群创建好了。集群里面有你的数据库。请记住,你在 MongoDB 中创建的集群。在这个集群里面有你的数据库。现在看看会发生什么?听着。现在这是与安全相关的事情,也就是说,每个人都创建数据库,但没有人关注安全。所以,听着,现在会发生什么?你在这里创建的集群,不是每个人都可以连接到它。只有一些选定的人可以连接到它。为此,我们需要在这里做什么?这里存在两层安全。也就是说,什么?而且还是两层安全。为什么会这样?听着,在数据库中,你会存储整个服务器的数据。你的整个应用程序都在后端运行。而后端的所有数据你都会存储在哪里?在数据库中。所以,在数据库中,你也会保存你的用户的详细信息,他们提供的用户名,他们的全名,他们的电子邮件地址,如果他们有物理地址,它也会在这里。如果你正在创建一个电子商务网站,那么他们的支付方式也会在那里存储。所以,你会存储这么多用户数据在你的数据库中,所以数据库的数据不应该泄露。它被非常安全地保护。为了保护它,MongoDB 为我们提供了两层安全。所以,如果你在这里进入安全,进入安全之后,你会找到一个网络访问层,另一个是数据库访问层。所以,我们先在这里谈论网络访问层。这里默认会有一个东西,暂时把它删除。所以,网络访问层将是,你可以删除它。现在听着,会发生什么?现在你的网络访问层是如何工作的,我们来稍微理解一下。好的,问一个问题,问一个问题,你刚刚创建的这个集群在哪里创建的?你在 MongoDB 的孟买区域选择了它。现在,如果你不知道,我坐的地方是博帕尔,博帕尔是中央邦的一个城市,我现在就在那里。所以,现在听着,我需要做什么?我坐在博帕尔,而我的数据库集群在哪里创建的?它在孟买创建的。所以,现在我需要连接我的机器到我的集群。为什么?听着,我们在这里创建的这个服务器,这个服务器正在运行。它在我的本地机器上运行。它在我的本地机器上运行。所以,需要做什么?看看,这个服务器将运行,服务器运行后,任何需要存储的数据都将在数据库中创建,而我的数据库在哪里?它在集群中。我的集群在哪里?在 MongoDB 的孟买区域。我的集群在那里。所以,现在看看需要做什么?首先,我需要连接我的服务器和我的 MongoDB 数据库。看,我会告诉你。我会更清楚地告诉你。直到你明白为止,我会告诉你。等等。所以,看看这里有我的笔记等等所有这些东西。看看,现在我有一个服务器。假设这是我的服务器,这里是我的数据库。所以,这是我的数据库。这是哪个数据库?这是我们的 MongoDB 数据库。好的?这是我们的 MongoDB 数据库,这是我们的服务器。所以,我的服务器现在正在我的本地机器上运行。而我的机器现在在哪里?在博帕尔。好的?我的机器不在博帕尔。不在博帕尔。博帕尔之后,我的服务器,抱歉,不是服务器,我的数据库在哪里?它在孟买。好的?所以,博帕尔和孟买,这是两个地方。所以,我的服务器在我的本地机器上运行,它在博帕尔。而我的数据库在哪里?在孟买。所以,现在听着,任何需要存储数据的服务器都将在哪里存储?在数据库中,服务器将在数据库中存储数据。在数据库中,它位于孟买。现在,要存储数据,在数据库中首先需要做什么?我的服务器需要连接到我的数据库。这是我们一项重要的工作。好的。所以,我的服务器和我的数据库,我们通过什么连接?通过互联网连接。它们通过什么连接?通过互联网连接。现在问题是什么?问题是,互联网上还有很多其他机器,对吧?互联网上不只有我的机器。你的机器也在那里。你朋友的机器也在那里。世界上还有很多其他人,他们的机器都在互联网上。但是我们需要做什么?我们不想允许他们连接到我们的数据库。我自己的服务器。只允许它连接到我的数据库。当然,出于安全原因。这就是我们在这里做的。所以,我们怎么做?听着。当任何东西通过互联网连接时,每台设备都会被分配一个特定的 IP 地址。互联网协议在那里被分配。所以,会有一个 IP 地址。所以,看看,这个服务器,这个服务器,它在哪里运行?它在我的机器上运行。所以,我的机器有一个 IP 地址。所以我在这里做什么?我以这种方式配置数据库,也就是说,无论我的机器的 IP 地址是什么,你只能从这个特定的 IP 地址连接,而不能从其他机器的 IP 地址连接。所以,我们这个网络访问层,这个,我们用它做什么?我们只是在这里允许那些我们想要连接的 IP 地址。也就是说,什么?也就是说,我的数据库想要连接或可以连接的特定机器,我只允许那个机器的 IP 地址连接到我的数据库,而其他任何机器的 IP 地址我都不允许。例如,现在我需要允许的只是我自己的本地机器的 IP 地址。所以我在这里,你会看到添加 IP 地址,这里你会得到两个选项,添加当前 IP 地址,还有一个是允许从任何地方访问。所以,如果我在这里,谈论添加当前 IP 地址,那么我当前的 IP 地址是什么?就是这个。所以,这个 IP 地址将被配置。很好,没问题。所以,这个特定的 IP 地址将被配置。现在,如果我在这里谈论。现在问题是什么?问题是,我们现在连接到 Wi-Fi,而且 Wi-Fi,或者你可以说,你很有可能正在使用移动互联网,并且正在使用移动热点。所以,看看可能性是什么。当我们谈论移动热点时,手机的 IP 地址会不断变化。Wi-Fi 也会改变,但需要几天时间。所以,会发生什么?发生的事情是,这个 IP 地址会不断变化。也就是说,什么?因为你正在使用手机热点或 Wi-Fi,所以 Wi-Fi 的 IP 地址也会改变。它会发生。它的周期一直在进行。所以,那个 IP 地址会在那里改变。所以,现在看看会发生什么?发生的事情是,我们在这里不添加当前 IP 地址。我们在这里允许从任何地方访问。那么,这在生产环境中也有效吗?不。在生产环境中,它绝对无效。在生产环境中,只有一件事有效。什么?也就是说,你的服务器运行在哪台机器上,你只允许那台机器的 IP 地址连接到你的数据库,而不允许任何其他机器。所以,现在我们在这里允许从任何地方访问。所以,这意味着什么?这意味着我们现在在生产环境中。当你,当你处于生产环境中时,你在这里,抱歉,我说错了生产环境。我们现在不在生产环境中。我们现在在开发环境中。我们现在在开发环境中。所以,只要你在开发环境中,你就可以在这里允许从任何地方访问。因为你的生产数据库,只有在服务器上,你的服务器运行在哪台机器上,你才允许那台机器的 IP 地址连接到你的数据库,而不允许任何其他 IP 地址。所以,这是其中一件事。所以,只要你在开发环境中,在开发时允许从任何地方访问。一旦你进入生产环境,在生产时,你只允许这一个机器的 IP 地址连接到你的数据库。所以,看看,来到这里,确认。确认之后,这个 IP 地址规则需要一些时间才能启用,或者可以说,才能激活。所以,允许它。所以,希望你已经清楚了这个网络访问部分。现在来到数据库访问。所以,在数据库访问中,你会发现这里有不同的用户,他们可以以不同的方式工作。也就是说,什么?听着,数据库中的主要操作有四种。哪几种?看看,我告诉你。数据库中主要有四种操作。哪几种?它们主要被称为 CRUD 操作。C 的意思是创建。C 的意思是创建。然后,如果我在这里谈论 R,那么 R 的意思是读取。U 的意思是更新,D 的意思是删除。所以,四种操作,我们称之为 CRUD。创建、读取、更新和删除。这四种操作都存在。所以,你只在数据库中进行这四种操作。你如何进行,这属于不同的逻辑。为什么需要,如何进行,这属于逻辑。但是主要是在数据库中进行这四种操作。所以,这个数据库访问层,它是哪个安全层,它有什么用?所以,看看,它有什么用?也就是说,你在这里创建了多个用户在你的数据库中。是的,多个用户,也就是说,我不明白。听着,Spotify 知道 Spotify 吗?Spotify。所以,如果我在这里,来到 Spotify,来到 Spotify,然后在这里,有很多音乐,你可以很容易地听这些音乐。如果你愿意,你可以在这里创建一个你自己的播放列表。创建播放列表后,你也可以喜欢任何音乐。你可以做所有这些事情。这是你的。好的,你可以在这里上传一首特定的音乐吗?也就是说,你能创建一个新的音乐吗?不能。为什么?因为 Spotify 不允许。Spotify 不允许你在这里上传新的音乐。是的,但是 Spotify 不会允许普通用户。但是 Spotify 还有一个用户。Spotify 艺术家。很多人可能不知道。但是有一个 Spotify 艺术家用户。而你的 Spotify 艺术家可以创建新的音乐在 Spotify 平台上。所以,我想说的是,Spotify 有两种不同类型的用户。一个是普通用户,他可以听歌,创建播放列表,但不能创建新歌。但是另一方面,我们的艺术家用户,那个艺术家用户也可以在 Spotify 平台上创建新歌。所以,我想说的是什么?听着。我们这个数据库访问层,我们在这里创建了不同类型的用户在我们的数据库中,他们可以做什么操作,我们可以在这里定义。例如,如果我想在这里创建一个新的数据库,创建一个新的数据库用户,假设我给它起名叫 YT。好的?所以,我在这里给它起了名字 YT,我想要给它的密码是什么?生成一个。复制它。复制后,用户描述,这个密码,我们在这里复制,需要保存。所以,这是我的密码。保存密码后,用户描述不需要。现在,这里是内置角色。那么内置角色是什么?如果我在这里谈论,那么有哪些角色?有一个 Atlas Admin。Atlas Admin 的意思是?也就是说,你的用户,他可以在数据库中执行任何操作,没有任何限制。然后我们有一个读写任何数据库。也就是说,这个特定的用户可以读取任何数据库中的任何内容,并且可以写入任何数据库中的任何内容。只读取任何数据库。也就是说,如果你选择这个角色,那么用户只能读取数据库,他无法修改或更新。所以,现在我们去的是什么?是我们的 Atlas Admin。因为我们不是在生产环境中看。我们现在在这里学习。所以,我们在这里选择 Atlas Admin。所以,看看,点击添加用户。添加用户后,我们的用户就创建了。现在,用户创建后,用户创建后,现在看看会发生什么?你的一个主数据库,那个数据库你已经设置好了。数据库设置好后,你回到 MongoDB 的网站,你的 MongoDB 网站,MongoDB.com。回到这个网站。回到这个网站后,来到产品,然后在这里,在工具下面,你会找到一个叫做 Compass 的东西。下载它。所以,MongoDB Compass,你需要下载它。所以,立即下载。立即下载,点击。点击后,MongoDB Compass 下载指南。请注意,上面这个 MongoDB Shell 下载,这个下载。
你不需要下载你想要下载的是 mgodb compस 下载 guआई。下载这个。下载之后,根据你的机器是 Windows 还是别的什么,你就下载相应的版本并安装。
当你下载并打开 md 时,打开之后你会看到一个窗口。那个窗口正在打开。它打开到了第二个页面。所以你会在这里看到一个窗口。现在看,这个窗口一开始会是这样的。这里不会显示这么多东西。这些是我的不同数据库。这些是我的不同数据库。不同的集群。说它们是数据库是错误的。这些是我的不同集群。所以这些都是集群。现在,我将在这里连接我们创建的另一个集群。还记得吗?我们在这里创建了另一个集群,我们给它起了什么名字?YT Complete Backend。所以我们创建了另一个特定的集群。现在我将在这里连接它。怎么连接?现在,我将在这里使用我的 MongoDB Compass。MongoDB Compass 是什么?它是一个工具,我们用它来做什么?无论你的集群是什么,以及集群中有多少数据库,以及这些数据库中有多少数据,我们只是用它来查看这些数据。所以现在如果我来到这里,这里会是什么?看,所以你需要在这里连接集群。要连接,这里有一个加号按钮。点击这个加号按钮,它会问你 URI。那么 URI 从哪里来?URI 会在集群页面找到。当你来到这里时,会有一个连接按钮。点击连接。点击之后选择 Compass。选择 Compass 之后,选择“I have MongoDB Compass installed”。你可以点击它。点击之后,这里会有一个字符串。所以复制连接字符串,然后打开 MongoDB Compass。所以这个字符串,复制它。复制之后,在这里粘贴。粘贴之后,现在你需要注意一些事情。在这个地方会是什么?DB 密码。这里会有一个东西。现在这个链接到底做了什么,我来给你解释一下。所以看,这个链接到底做了什么,我现在解释。所以看,这个链接大概是这样的:MongoDB + SRV and hyphen colon slash slash YT password then password is @ YT Complete Backend。这个 YT Complete Backend 还记得吗?这是什么?这是我们集群的名字。这是什么?这是我们集群的名字。还有一些其他的东西,以及 mgo ddb.net。所以这个链接到底做了什么?这个链接告诉我们,我们需要连接到一个特定的集群,以及这个集群的地址是什么。所以集群的地址是,嘿,YT Complete Backend 是它的名字,它存在于 mongodb.net 中。这里就说明了这一点。以及我们用哪个用户的凭据连接?因为我们的 MongoDB 数据库里可以有很多用户。所以我们在这里说明用户的名字和用户的密码。所以用户的密码在这里。复制这个用户。复制这个密码。复制之后,在这里粘贴。所以我们需要做这些。所以这个链接就完成了。复制它。复制之后,你可以在这里粘贴。所以粘贴了,颜色我想我们可以用红色。好吧?所以我选择红色,然后我在这里点击“Save & Connect”。请记住,点击“Save & Connect”。点击“Save & Connect”之后,我们将连接到这个特定的东西,我们的 YT Complete Backend。现在如果你看,我们已经成功连接到我们的集群了。现在我们要在这里创建一个数据库。创建数据库之后,我们最终将通过服务器将我们的数据存储在我们的数据库中。现在怎么做,我们将继续前进。但现在理解一件事。什么?如果你觉得这东西很复杂。是的,有点。有点。但据我所知,如果你还有一点点疑问,就再看一遍这个视频。以 1.5 倍速观看,事情会更清楚。看,它并不复杂。我讲得很慢。不会有什么大问题。如果你觉得事情还是有点难,没关系。那也没关系。你第一次做这些事情。什么是数据库?什么是集群?如何创建它?如何在 MongoDB 上创建集群?你第一次做所有这些事情,所以没关系。如果你觉得有点难,只是你觉得难但你还是在做,或者你觉得难然后你就放弃了。所以不要放弃。记住,不要放弃。当你点击这个视频的时候,当你打开这个视频的时候,你就知道,如果我看了这个视频,我就会学会后端。所以就完整地看完这个视频,你就会学会后端。如果你在中间放弃了,你就学不会。记住这一点。如果你在中间放弃了这个视频,你就学不会后端。这是很重要的一点。所以兄弟们,这次就努力一把。这次如果你完整地看了这个视频,你就会学会整个后端。不会有什么问题,兄弟们。后端会做得很好,未来还会有更好的后端。未来还会有更多东西。这个特定的部分可能有点复杂,有点难。但我只是告诉你。看,当我们学习后端的时候,有两个主题会有点难。第一个就是我们现在正在进行的,也就是数据库。第二个主题将是认证。所以你完成了这个主题,然后接下来的认证会让你觉得有点难,但不会太难。这是我的保证。有点难,但也不会让你觉得难。这是我的保证,也不会让你觉得难。只要你把现在这个 MongoDB 做好。如果你还有点困惑,回到视频。以 1.5 倍速播放,然后完整地回顾一下我们在这里做了什么。创建一个集群,然后用 MongoDB Compass 连接集群。现在我们将继续前进,看看如何创建一个数据库,以及如何在其中存储我们的数据。我们需要在这里看到这一点。好了,到目前为止,我们已经设置了一个集群。以及哪个 IP 地址可以连接到那个特定的集群。同时,还有一个用户,他拥有最终的管理员访问权限,我们也已经设置好了。然后我们看了 MongoDB Console,MongoDB Compass 是什么?它是一个工具,通过它可以查看我们的集群中有多少数据库,以及这些数据库中存储了什么数据。到目前为止,我们已经看到了这些。现在看,现在要做什么?现在我们的目标是什么?看,我们的服务器要连接到我们的数据库,这个数据库会在集群中。连接到这个数据库,然后服务器可以存储任何数据,它可以在这个数据库中存储。这是我们的主要工作。所以集群已经设置好了。现在要创建数据库,然后将服务器连接到它。这就是我们要做的。现在听,我们会创建数据库。但是我们的服务器,我们如何将服务器连接到数据库?我们用什么?怎么连接?所以有一个包,包的名字是什么?Mongoose。所以有一个叫做 Mongoose 的包,我们使用这个包,以便我们的服务器能够连接到我们的 MongoDB 数据库。所以我们在这里使用 Mongoose 包。所以现在看,来到终端。来到终端之后,安装一个包。包的名字是什么?Mongoose。所以我们在这里安装了 Mongoose 包。安装 Mongoose 包之后,现在看,我们从头开始吧。因为我们还有很多东西需要改变。所以从头开始。所以听,现在这里没有文件了。我们的一个 Node.js 应用程序,要初始化它,我们需要 npm init -y。我们将使用 npm init -y。我们需要一个包。包的名字是 Express。我们使用 Express 包来创建我们的服务器。所以使用 Express 包。然后我们需要一个东西。那个包的名字是什么?Mongoose。我们正在安装 Mongoose 包,以便我们的服务器和我们的数据库能够连接起来。所以在这里使用 Mongoose 包。好吧?所以现在看,我们写一些基本的代码,可以创建并启动服务器。所以服务器创建在 src 文件夹下的 app.js 文件中。所以在这里创建一个 app.js 文件。我们将在这里 require Express = require Express。require 了 Express 之后,将创建一个 Express 的实例。然后我们在这里说 module.exports = app。我们可以在这里说。现在听,你在这里创建了服务器。创建服务器之后,要启动服务器,你将在这里创建另一个文件。文件名字叫做 server.js。创建了 server.js 文件,你在 app.js 文件中创建的服务器,并从那里导出。我们将在这里 require 它。所以 const app = require。我们在这里说,require src 文件夹下的 app 文件。require 之后,我们将通过 app.listen 在端口 3000 上运行。然后我们将在这里给一个回调。回调是 console.log("Server is running on port 3000")。很好。所以这里正在进行这项工作。很好。所以到目前为止我们做了什么?我们创建了服务器,并且启动了服务器。所以我们做了两件事。哪两件事?创建服务器,启动服务器。现在,在设置任何服务器时,最初的第三件事是:将服务器连接到你的数据库。所以现在听,会发生什么?就像我们在这里创建了两个文件。哪两个文件?这两个文件。一个文件是 app.js。一个文件是 app.js。它的作用是创建服务器。另一个文件是 server.js。它的作用是启动服务器。所以两个不同的文件,它们有不同的作用。同样,连接数据库的工作,你也可以在这里写逻辑。这正是你的工作:将服务器连接到数据库。你肯定会做这件事。但是为了做这件事,你需要写的程序,你需要写的逻辑,你会在一个单独的文件中写。在哪个文件里写?所以你在 src 文件夹下创建一个文件夹,叫做 db。然后在 db 文件夹下,你创建一个文件,名字叫做 db.js。在这个特定的文件里,你写逻辑,说明你的服务器如何连接到数据库。所以我们在这里 const mongoose = require('mongoose')。为什么 require mongoose?我们在这里 require mongoose,以便我们的服务器能够连接到数据库。要将服务器连接到数据库,我们需要使用一个包。包的名字是什么?Mongoose。所以我们在这里使用 Mongoose 包。现在你使用了 Mongoose 包。现在听,会发生什么?你将在这里写逻辑。在哪里?在 db.js 文件中。写逻辑,服务器如何连接到数据库。但是你在这里创建一个函数。函数的名字是什么?函数的名字你在这里写 connectDB。connectDB 是你的函数名。在这个 connectDB 函数里,你将在这里写 await,然后在 await 里写 mongoose.connect。现在这个 mongoose.connect 方法做什么?mongoose.connect 方法在这里,我们可以说,它将连接你的服务器到你的实际数据库。这个方法,mongoose.connect,就是这个方法将你的服务器连接到你的数据库。哦,它还需要什么吗?是的,它需要一些参数。什么参数?它需要 URI。它需要一个 URI。哦,这个 URI 从哪里来?这个 URI 来自于 Compass。当你连接到你的集群时,当你连接到集群时,连接时你也提供了一个 URI。它需要相同的 URI。所以现在看,复制连接字符串。复制之后,你可以在这里粘贴。很好。所以现在听,你在这里获得的这个 URI。这个 URI 到哪里?到你的集群。到哪里?到你的集群。所以你的服务器现在将连接到这个 URI。它正在连接到集群。但是服务器不连接到集群。服务器需要连接到集群中的数据库。但是这个 URI 只到集群。我们需要连接到数据库。所以为了连接到数据库,让我们在这里说,我们在这里有一个数据库。我们需要在集群中创建一个数据库。是的,当然需要。所以我们在这里做一件事。让我们说,我们可以说,Helly。好吧?所以我们的数据库名字,我在这里给数据库起的名字是:Helly。我在这里给数据库起的名字是 Helly。所以这意味着什么?整个 URI 的意思是什么?听。所以从这里到这里,在 .net 之后,我们看到的斜杠。URI 到哪里?到你的集群。到这里,你的 URI 结束了。现在在这个 URI 之后,你有的 Helly,你有的 Helly。这是什么?这是集群中要创建的数据库的名字。Helly 是什么?Helly 将是数据库的名字。但是这个数据库我们还没有创建,怎么会这样?所以听,会发生什么?这个 mongoose.connect 方法非常强大。怎么强大?它强大是因为它的主要工作就是将服务器连接到数据库。所以它现在将连接到哪个服务器?连接到哪个数据库?所以它将连接到我们的集群。集群中有一个叫做 Helly 的数据库。它将连接到它。但是这个数据库我们还没有创建。所以它很强大,为什么?因为如果它在集群中找不到叫做 Helly 的数据库,它会做什么?它会创建一个叫做 Helly 的数据库,然后连接到它。这就是它的简单情况。当它连接成功后,我们在这里会打印。console.log("Connected to DB")。我们在这里会打印这些。哦,这里你需要理解一些事情。比如我们为什么用 await?await mongoose.connect。你可能会有点理解困难。看,会发生什么?现在听,会发生什么?我们的服务器,这个服务器将在我的本地机器上运行。服务器在哪里?在博帕尔。而我的数据库在哪里?在孟买。所以现在的情况是:这两个将连接,并通过什么连接?通过互联网连接。所以这两个需要多长时间才能连接?我不知道。因为这完全取决于,嘿,两者的互联网速度是什么,以及互联网质量是什么?这取决于它。所以我们不能说,我们的服务器需要多长时间才能连接到我们的数据库。因此,我们在这里放了什么?await。await 的意思是什么?await 的意思就是,直到 mongoose.connect 方法将我们的服务器连接到数据库,你在这里都会等待。因此,我们在这里放了 await。如果你在这里放了 await,那么你必须在这里放 async。当它连接成功后,什么?我们的服务器连接到数据库后。然后你在这里打印 "Connected to DB"。现在听,你创建了这个函数 connectDB。当你调用这个函数时,这个函数就会执行,然后你的代码就会执行。所以我们在这里调用它。connectDB。所以需要这样调用吗?不,不需要这样调用。如果需要这样调用,我就不会创建函数了。听,会发生什么?db.js 文件,你只是在这里写逻辑。如何将你的服务器连接到数据库。但是你最终的动作,是的,现在连接你的服务器到数据库。你是在哪里做的?你在 server.js 文件中做的。什么意思?看,你创建的这个函数 connectDB。这个函数会做什么?它会连接你的服务器到你的数据库。所以这个函数,我在这里导出它。我在这里导出它。导出之后,在 server.js 中,我将 require 它。所以 connectDB,或者我们先在这里 const connectDB = require。我们在这里说,require src 文件夹下的 db 文件夹,以及 db 文件夹下的 db 文件。我们将 require 它。然后我们在这里调用我们的 connect 函数。很好。所以现在看,db.js 文件,我们在这里只是
逻辑在解释兄弟们如何连接。但我们最终的行动是调用函数,调用函数后,我们的服务器就连接到数据库了。你在这里做什么?在 server.js 中完成这件事。这只是一个简单的事情。现在听,现在看会发生什么?现在如果我运行 server.js 文件,那么这里的 connectDb 函数就会被调用。当我调用 connectDb 函数时,我的服务器将连接到数据库,并在控制台输出“Connected to DB”。它将在这里输出。是的,当然会。所以看,现在如果我在这里运行 npx nodemon server.js,那么这里就会出现“Server is running on port number 3000”,同时也会出现“Connected to DB”。很好,现在“Connected to DB”在这里出现,这意味着什么?这意味着我的服务器已经连接到我的数据库了。到目前为止,我们在这里已经完成了这么多,我将我的服务器连接到了我的数据库。但我们不需要做这么多。我们在这里要做的是,我们在这里创建的笔记,在我们的任务中,现在需要将这些笔记存储到我们的数据库中。所以看,现在会发生什么?我告诉过你,一个笔记,我们的一个笔记,里面会有两样东西。一个将是标题,另一个将是这里的描述。会有两样东西。我们之前也用这两样东西创建过笔记。所以看,现在会发生什么?当你需要将任何数据存储到数据库中时。首先,你必须告诉你的服务器关于那个数据。不是服务器,而是你的数据库。什么意思?听,再听一遍,这次仔细听我说什么。如果你想将任何数据存储到你的数据库中,你必须首先告诉你的数据库,那个数据到底是什么样的。比如,我现在需要将笔记数据存储到我的数据库中。那么我必须首先告诉我的数据库,一个笔记是什么样的。我必须告诉我的数据库。好的,我们称这个过程为什么?我们称这个过程为创建模式。我们在这里称之为创建模式。创建模式是什么意思?告诉数据库,我们将在数据库中存储的数据到底是什么样的。比如,看。在这里看。现在这里会发生什么?我需要在这里存储笔记。笔记数据是什么样的?它里面有两个属性。一个标题,一个描述。我必须将同样的事情告诉我的数据库。这里之前冒了很多泡泡,它们一直在里面。所以看,这里要做什么?这个过程,就是告诉数据库,我们将如何存储数据。你称之为创建模式。创建模式也需要一个单独的文件夹,一个单独的文件。所以你创建的模式是在 models 文件夹中创建的。在 models 文件夹中,你在这里说 note.model.js。所以看,要创建一个模型或模式,你再次需要 require mongoose = require('mongoose')。所以你将再次在这里 require mongoose。那么 mongoose 我们需要再次 require 吗?我们已经在 db.js 文件中 require 过一次了。我们已经在 db.js 文件中 require 过一次了。那么我需要在 note.model.js 文件中再次 require mongoose 吗?是的,你必须再次 require mongoose,然后你才能使用它。你不能在没有 require 的情况下使用它吗?在这个文件中不能。它会报错,说 mongoose is undefined。它会报错。所以 require mongoose。require mongoose 后,我们在这里创建 noteSchema。我们在这里创建 noteSchema。如何创建?看代码。mongoose.Schema,然后在 Schema 中,我们将在这里说明,Schema 中,看,笔记里面会有两个属性。一个将是标题,另一个将是描述。我必须将这两个属性告诉数据库。所以看,我会说什么?我的笔记将有一个属性,它的类型是什么?字符串。所以标题,它的类型是什么?字符串。我们给的标题是字符串,对吧?同样,我们的描述,这个描述也将是字符串格式。所以看,我现在在这里说了什么?我在这里告诉了我的数据库,我将创建一个笔记,笔记里面会有两个属性。哪两个?标题和描述。标题是什么类型?字符串类型。描述是什么类型?字符串类型。好的,如果我在这里存储一个用户的年龄,比如,如果我在这里存储年龄,那么它将是数字格式。好的,如果我在这里存储 DOB,那么它将是日期格式。所以你存储的数据类型,你必须在这里说明。这只是一个简单的规则。如果你在处理数据库,那么数据库的一些规则,你必须在这里遵守。所以,第一个规则是什么?如果你想在数据库中存储任何东西,那么那个数据是什么样的,你必须提前告诉你的数据库。比如,我接下来要将笔记数据存储到数据库中。那么一个笔记是什么样的?我必须在这里说明它的模式。模式里有什么?标题。标题的类型是字符串。描述。描述的类型也将是字符串。所以,我们已经说明了模式。说明模式后,我需要在这里创建一个模型。所以 const,那么模型是什么?这是什么?我们也会讨论这个问题,模型是什么?所以看,mongoose.model,我们先创建一个模型,然后我再解释为什么创建它。所以 mongoose.model,模型名称在这里会要求一个字符串,笔记,以及另一个东西,noteSchema。你在这里会说明这两样东西。所以听,会发生什么?为什么我们创建这个 noteModel?如果我谈论它,那么看。我们在这里创建了 Schema。创建了 Schema。为什么创建?为了告诉数据库,我们要存储什么样的数据。我们可以做到。但是为什么创建模型?听。如果你想在数据库中执行任何与笔记相关的操作,那么你就必须创建 noteModel。什么操作?我说的操作是这里的 CRUD 操作。CRUD 操作包括什么?创建、读取、更新和删除。其中我们将使用不同的方法。目前我们将使用 patch。所以看,这些 CRUD 操作。什么意思?创建一个特定的笔记,读取那个笔记的数据,更新它,删除它。这些操作,要在数据库中完成,就必须创建 noteModel。如果不创建 noteModel,那么也可以做到,说实话。但就是那样。举个例子,如果不创建 noteModel 会怎么样?你仍然可以执行操作,但可以说,事情会变得非常困难。你需要写很多代码来做同样的事情。需要写很多重复的代码。问题就在这里。所以,我们不走原始路线。我们在这里创建一个 noteModel。创建 noteModel 后,执行任何与笔记相关的操作就变得非常容易了。所以,我们在这里创建 noteModel,然后从这里导出 noteModel。所以,我们在这里创建的这个 noteModel,导出它。然后,我们的 app 文件,在这里 require 它。所以 const noteModel = require(),然后我们在这里说,在 models 文件夹中,我们有的 noteModel。我们在这里 require 了它。require 之后,我们在这里将有四个 API。我们来讨论一下,我们将创建哪四个 API。所以看,第一个 API 将是 /POST /notes。在这个 API 上,我们将做什么?创建笔记。然后,我们还有一个 API,GET /notes。然后,我们还有一个 API,这个 API 将使用 DELETE 方法。DELETE a note。还有一个 API,使用 PATCH,更新笔记。所以,这四个 API 我们需要分别创建。其中 colon ID params 这些东西我们都已经讨论过了。所以,这四个 API 要创建。区别在哪里?区别在于,这次我们将存储到数据库中,而不是存储到 notes 数组中。所以,首先,我们的这个 POST API,POST /notes API,我们需要创建它。所以,来到这里 app.post。在 post 中,我们将在这里写 /notes。然后,我们可以说,这里将有一个回调函数,request and response。现在,这里将来的数据,看,数据将在 request.body 中。数据将在 request.body 中。现在,问题是什么?在 request.body 中,数据不会到来,除非你在这里使用一个中间件。中间件的名字是什么?express.json。除非你使用这个中间件,否则你的 request.body 中不会有数据。所以,数据将在 request.body 中。现在,要来的数据,听,这里会来什么数据?数据将是一个对象。对象里面会有两样东西。一个标题,一个将是这里的描述。所以,在 request.body 中,就像之前数据到来一样。以对象格式,标题和描述。同样的数据现在也会到来。那么,现在要用这些数据做什么?现在,我们需要将这些数据存储到我们的数据库中。要执行任何与笔记相关的数据库操作,我需要 noteModel。我已经在这里 require 了。所以,我现在会在这里,noteModel.create。我将在这里创建我的数据。但是这种方式不太好。所以,看,我现在会做什么?我需要创建的 noteModel。我需要在这里创建一个 noteModel。不是 noteModel,而是用 noteModel 创建一个笔记。所以,看,当我想要存储一个笔记的数据时,它里面有多少属性?两个属性。哪两个?一个是标题。标题在哪里可以找到?我可以在 data.title 中找到,也就是 request.body。还有一个将是这里的描述。所以,在 description 中,我可以在 data.description 中找到。所以,听,我们在这里做什么?用我们创建的 noteModel,我们在这里创建一个数据,里面会有标题和描述。数据是什么?是我们的笔记。现在听。这个数据将存储在哪里?存储在我的数据库中。数据库在哪里?在我的集群中。集群在哪里?在孟买的服务器上。好的?服务器在孟买。故事很简单。我的服务器在哪里?在博帕尔。所以听,博帕尔的服务器,也就是说,在博帕尔的服务器,想存储数据到孟买。那么,数据怎么会去孟买呢?首先,要去孟买的数据,是通过互联网去的。然后,数据库会保存这个数据,并发送一个响应,说,是的,这个数据已经保存了。那么,需要多长时间?数据存储需要多长时间,响应需要多长时间?不知道,因为使用了互联网。所以,这里不知道,所以我们在这里说 await,因为无论需要多长时间,你在这里等待。因为这里使用了 await,所以这里将使用 async。很好。所以,我们在这里使用 async。所以,async await 在这里使用。当这段代码完成后,我们再次在这里获取响应。状态码将是 2001。然后,我们将以 JSON 格式发送消息。消息是“Note created”。“Note created successfully”。我们可以发送这个消息。所以,我们创建了一个 API。API 已经准备好了。API 准备好后,服务器已经在运行了。如果我来到 Postman,来到 Postman 后,我们之前使用过的 POST 方法的 API。我们将使用这个 API。看怎么做。再看一遍。看,新的 API 方法是 POST。URL 将是 localhost:3000/notes。在 body 中,我们将以 raw 格式分享东西。什么?首先是标题。标题是 test title。然后,我们将谈论 description。test description 我们在这里提供。很好。所以,标题和描述,这两样东西我们都添加了。现在,如果我发送它,响应是什么?“Note created”。所以看,发生了什么?标题和描述,这两样东西都发送到了你的 notes API 中,使用 POST 方法。这两样数据,在 request.body 中到来。在 data 中,我们有了标题和描述。我们用它们创建了一个新的笔记在我们的数据库中,使用 noteModel。在创建了数据后,我们发送了响应,说这个笔记已经创建了。好的。所以,如果这段代码运行了,那么就会用标题和描述创建一个新的笔记。绝对会创建。是的。所以,现在,如果我打开 MongoDB Compass,这就是我的 MongoDB Compass。这是我的集群。如果我打开这个集群,那么看,这里有一个数据库。数据库的名字是什么?HeLi。所以,如果我打开 HeLi 数据库,那么这里会有 notes。你创建的所有笔记都会在这里。现在,如果我打开它,那么看,这里已经创建了一个特定的笔记。它的标题是什么?test title。描述是什么?test description。很好。所以,现在,如果你在这里看,我们连接了我们的服务器和数据库。最终,我们将服务器的数据存储到了我们的数据库中。运行得很好。现在,我们已经完成了一个简单的事情。什么?到目前为止,我们已经完成了一件事,就是创建了一个笔记。现在,要获取所有创建的笔记,我们需要创建 GET API。所以,看,来到 app.get。在 app.get 中,我们将在这里读 /notes。然后,async。好的,你可能现在对一些事情感到困惑。看,如果你在这里看数据,如果你在这里看数据,那么标题和描述都会出现。同时,这里还有一些东西?_id 和 __v。我更倾向于读作 __v。所以,__v 和 _id。这两样东西我们没有创建。Mongoose 包自己会添加它们。我们不保留它们。Mongoose 自己会一直添加这些东西。所以听,会发生什么?这个 _id,这个 _id,你创建的每一个笔记,每一个笔记,都会得到一个唯一的 ID。这个唯一的 ID 是什么样的?如果你创建两个笔记,那么两个笔记的 ID 都会不同。创建三个笔记。三个笔记的 ID 都会不同。创建 10 个笔记。10 个笔记的 ID 都会不同。创建 10 万个笔记。10 万个笔记的 ID 都会不同。创建 1000 万个笔记。那里 1000 万个笔记的 ID 都会不同。所以,这里的 ID,是唯一的。任何两个笔记的 ID 都不会相同。甚至不会重复。所以,这是这里的一个东西。而这个 __v,我们稍后会谈论。目前,先理解 ID。笔记的 ID,ID 是不同的。每个笔记的 ID 都会在那里不同。很好。那么,你还在睡吗?你还在睡吗?如果没睡,那很好。如果睡着了,那就醒过来。兄弟们听。数据库,我知道。是一个有点复杂的话题。很多事情需要记在心里。我们的整个后端。让我等一下。让我把屏幕放大一点。听。我知道后端是一个有点复杂的话题。你看不见很多图像、颜色。但是,相信我,后端一旦你理解了,你就会觉得没有什么比后端更好了。我最喜欢后端。我最喜欢后端。我喜欢后端。这是真的。你也会喜欢的。你也会喜欢的。只要努力一点。如果你睡着了,那就醒过来。因为兄弟们,后端只需要做一次。后端做一次。一旦你理解了所有事情。
兄弟们,你们会觉得后端不难。你们想要什么,就能创造什么。如果你们想学习任何与生成式AI相关的东西,你们真的都能做到。我稍后会带来一些关于生成式AI的教程,你们可以看看。但是,要学习生成式AI,你们在这里就需要后端。而且,生成式AI不仅仅需要后端。后端是今天的必需品,兄弟们。你们看到的任何应用程序,没有后端都无法实现。没有后端都无法实现。兄弟们,只需要一次。只需要学习一次后端,就可以了。相信我,就可以了。我知道有时候会感到很沮丧,觉得可能做不到。所有这些事情。不,要控制所有这些事情,并在脑海中只记住一件事:不行,我必须要做这件事。我必须要做这件事。这次必须要做。也许你们以前也尝试过。可能尝试过学习其他东西。我知道每次的错误是什么?你们开始学习一件事。一开始学得很好。学得很好。你们可能认真学习了一两个月。但是,当事情变得困难时,你们就开始放弃了。就像,兄弟,有点难。我以后再做。你们再试着学一点。仍然不行。你们就说,兄弟,过几天再说吧。就这样,你们放弃了。你们开始做所有的事情。一开始很容易。后来变得困难,你们就开始放弃。问题就在这里。你们没有坚持一件事情。就坚持这个视频吧。学习后端,后端就会了。相信我,后端就会了。在这个视频里我教的后端,真的足够了。足够创造任何东西。你们能用它创造任何东西,而且能创造出生产级别的产品。我教的不是肤浅的东西。记住这一点。我教的是生产级别的东西是如何工作的。就是这样。好了?所以,现在还在睡觉的就醒醒吧,重新开始学习。看看,到目前为止,如果我们在这里看,我们已经创建了一个节点。现在创建节点,假设再创建一个节点。好吧,我们在这里再创建一个节点。下划线二,下划线二之后,再创建一个节点。所以,我们创建了一个节点。现在创建的节点,我进入数据库。数据库不会实时重新加载。不会实时反映。所以,按一次 Ctrl+R 或 Command+R。这样,你们所有的新节点都会在这里显示出来。所以,我们在这里创建了两个节点。如果看这两个节点的ID,这两个节点的ID在这里非常不同。就是这样。因为你们创建的任何节点,它们的ID都完全不同。所以,ID会不同。每个节点的ID都会不同。现在看,我创建的所有节点,为了获取它们,我们在这里创建了一个GET方法的API。在GET方法的API中,我们在这里使用了一个方法,叫做const notes。我们在这里使用一个方法。现在,方法是什么?或者我们要用什么?await note model.find。我们在这里将使用 note model.find。那么,看看它有什么情况?就是,兄弟,note model.find。我告诉你们,如果你们要在数据库中做任何与节点相关的事情,你们就一定会需要note model。没有它,什么都做不了。所以,我们在这里使用了note model,并在note model上使用了一个方法。它的名字是什么?find。这个find方法的作用是什么?它的作用是,兄弟,数据库中创建的所有节点,把它们全部拿过来放在这里。现在,如果你们看,数据库中有多少节点?创建了两个节点,那么就会返回两个节点。哦,如果创建了10个节点,那么就会返回10个节点,如果创建了100个节点,那么就会返回100个节点。如果创建了10亿个节点,它会读取10亿个节点,并将这10亿个节点发送给你们。事情就是这样。所以,现在要明白一件事:这里会发生什么?你们数据库中的所有节点,都会返回给你们。然后,我们将它们保存在哪里?我们将它们保存在 notes 数组中。notes 数组是什么意思?听着,find one,它给你的是,find,抱歉,不是find one。find,它总是返回一个数组。它总是返回一个数组,这是保证。保证find总是返回数组。所以,find在这里会返回一个数组,然后我将它发送到response.status,状态码是200,然后200之后,我们将以JSON格式发送一个消息,我们在这里发送什么消息?notes fetched successfully。然后,我们将我们的notes原封不动地发送在这里。我们在这里做了这件事。所以,看看,现在我们正在创建的API,在这个API中,我们正在做什么?它使用note model,有一个find方法。这个find方法做什么?它会查找数据库中的所有节点,并将它们保存在notes变量中。然后,在响应中,我们做什么?在响应中,我们将这里的notes发送出去。所以,看看,现在如果我进入Postman,点击API。方法是GET,localhost:3000/notes。现在,如果我点击它,发送。发送后,看看我收到的消息是什么?notes fetched successfully。然后,我的notes是什么?一个对象数组,每个对象里面都有我的notes数据:这个特定节点的ID是什么?存储在数据库中的ID,我们会得到。节点的标题是什么?描述是什么?它的版本是什么?版本稍后会谈。但是,第二个节点的ID是什么?它的标题是什么?它的描述是什么?以及它的版本是什么?所有这些都会在这里。哦,如果再创建一个节点呢?那么,我们在这里再创建一个节点。标题三。现在,如果我发送它。发送后,我将再次获取所有节点。那么,三个节点将在这里获取。请注意,你们的find方法,你们这里的find方法,它总是会返回数据,但是以什么格式返回?对象数组的格式。就像你们在Postman上看到的,数据是以对象数组的格式返回的。这是一个简单的格式。哦,如果一个节点都没有,你们会得到一个空对象。不是空对象,是空数组。也就是说,如果你们数据库里一个节点都没有,你们就会得到一个空数组。但是,总是会得到一个数组。事情就是这样。现在听着,除了这个之外,我们还有其他东西。一个是我们有find方法,它可以读取数据库。我们还有一个find one方法。这个find one方法做什么?它和find一样,但是就像它的名字一样,find one。所以,它找到一个。如何找到一个?你们可以在这里给出条件,说,你们在这里找到的,是标题,它的标题应该是?test_title。它的标题应该是这个。所以,看看,现在find one方法会做什么?它会把那个特定节点带过来,它的标题是?test_title。那个特定节点会被带到这里。所以,现在如果我发送它。发送,那么就返回一个单独的节点。而且,如果你们看它的结构,是什么?它是对象格式。不是对象数组格式。find one,find one会返回一个对象。返回一个单独的对象。但是,find方法会返回一个对象数组。哦,如果我设置了一个条件,那个节点不存在呢?比如,找一个标题是?test_title_four的节点。但是,这个节点根本不存在。我们只有三个节点。我们这里只有三个节点。直到test_title_three。没有叫做test_title_four的节点。那么,如果我用这个查询运行,find one找不到这个标题的节点。现在看看它返回什么?返回什么?null。所以,如果find one,如果你们给它一个查询,一个条件,而这个条件下没有任何数据存在,那么它返回的就是null。事情就是这样。那么,我们只能在find one上设置条件吗?不是这样的。你们也可以在find上设置条件。你们的find方法,也可以在上面执行条件。在条件中,你们可以这样说:你们在这里查找标题,标题你们是这样查找的。test_title。你们在这里查找。那么,find one会做什么?这个find方法会把所有你们在这里找到的标题是?test_title的节点都带过来。所以,返回了一个单独的节点,返回的节点是哪个节点?标题是?test_title的节点。哦,如果我设置了一个条件,而这个条件下没有任何东西存在,那么这里会返回一个空数组。所以,find和find one的区别在于什么?就是,你们的find方法,你们这里的find方法,它做什么?它总是保证。find方法总是保证,它会给你们一个数组。一定会给一个数组。如果找到数据,就会得到对象数组。得到对象数组。或者,它会给你们一个空数组。保证find one一定会给一个数组。然后,find one,如果找到数据,就会得到一个对象,如果没有找到数据,就会在这里得到null。这两件事都和它有关。我们这里有两种方法。一种是find。find保证它一定会给一个数组。如果找到数据,就会得到一个对象,或者一个空数组。保证find one一定会给一个数组。然后,find one,如果找到数据,就会得到一个对象,如果找不到数据,就会在这里得到null。事情就是这样。然后,response.status,如果我在这里说,notes fetched successfully,我们已经完成了,并且可以分享notes。现在,如果我们在这里继续,我们还有两个API。而且,这两个API是哪两个?现在看,有两个API,一个API我们在这里创建了节点。第二个API,我们获取了所有创建的节点。然后,还剩下一个API,删除一个特定节点。所以,我们现在来这里。之前我们用index来删除API。但是,现在我们将使用ID。因为这里没有index。我们这里有ID。所以,我将在这里使用ID。如何使用ID?听着。所以,这里会有一个ID。ID会在这里,request.params.id。利用这个ID,我将更新一个特定节点。现在要删除,怎么删除?听着。所以,我在这里会写await note model.findOneAndDelete。就像它的名字一样,它的作用也一样。MongoDB的所有方法,它们的名字都起得很好。它们的名字和它们的作用一样。比如,它的名字是什么?它的名字是findOneAndDelete。那么它会做什么?找到一个东西,然后删除它。很简单。我们在这里将根据什么来查找?我们将根据ID来查找。根据ID来查找。那么,为什么这里是_id?这里是_id,因为ID存储在数据库中,是以_id这个名字存储的。所以,我们在这里写_id,然后在这里设置ID的值。好了?那么,听着,我们在这里保存_id,然后现在我们将返回response.status,not deleted successfully。现在,要点击这个API。点击API的方法是,方法是DELETE,localhost:3000/notes/,我要删除的那个节点。现在,我们GET方法的API,设置了一些条件。我把这个条件去掉。哦,如果里面不设置条件,find会返回所有节点。所以,我现在要删除这个第二个节点。我复制了它的ID,然后在这里粘贴。所以,这次要发送到params的ID,是它自己的一个特定ID。这个ID会通过params存储在这个特定变量中,然后根据它来查找,然后删除。所以,看看,现在如果我来,我点击发送。发送后,这个就完成了删除。删除后,看看,我的第二个节点已经被删除了。所以,如果我再次请求,第二个节点就不会在这里了。同样的方式,我们再创建一个API。这个API是什么?app.delete,不是app.delete,是app.patch。然后,我们的API名字是/notes/:id。然后,:id之后,async request, response。我们在这里放request, response。MongoDB的大多数方法,你们都必须使用await。所以,我们在这里使用await。现在,看看,findOneAndUpdate。根据ID,当然我们会在这里查找。然后,我们要更新的,现在只是描述。我不会更新标题。所以,description: request.body.description。我们有一个方法叫做note model.findOneAndUpdate。所以,findOneAndUpdate,这个方法会要求你两个对象。所以,看看,findOneAndUpdate这个方法,它需要两个对象。是哪两个?第一个对象是,根据什么来查找?所以,我们会说,根据ID来查找。根据ID来查找。这是第一个对象。第一个对象里,你们告诉,根据什么来查找?第二个对象是,具体要更新什么。所以,我们会更新description,然后更新request.body中的description。然后,最后,response.status,note updated successfully,我们可以分享。所以,现在如果我们在Postman上看看。进入Postman,然后一个新的API方法是PATCH。PATCH之后,localhost:3000/notes/,我现在想更新这个第三个节点。所以,在Body中,以RAW格式发送description,然后description,我在这里说,updated description。好了?现在,如果我看第三个节点的description,它是test description three。但是,我现在想把它更新成什么?updated description。所以,现在如果我发送它,就会出现note updated successfully。同时,现在如果我发送它,看看,现在我的description是什么?updated description。很好。所以,现在如果我们在看。现在如果我在这里看。我们在这里创建了四个API,在这四个API中,这次我们存储的数据。听着,数据存储在哪里?在MongoDB中。在MongoDB数据库中,我们存储我们的数据库。到目前为止,我们已经学了这么多东西:创建了数据库集群。集群中,然后创建了我们的数据库。通过MongoDB包,将那个数据库连接到我们的服务器。然后,我们需要在这里存储节点数据。为了存储节点数据,我们首先告诉了我们的数据库。告诉了什么?我的节点到底是什么样的?里面会有标题,描述。两者的类型都是字符串。我告诉了我的数据库。然后,做完这些之后,做完这些之后,我创建了四个不同的API,POST, GET, DELETE, 和PATCH。其中,我们正在创建一个节点。我们可以看到所有创建的节点的数据。删除一个特定节点。然后,更新一个特定节点。所以,这四件事我们都做完了。所以,希望你们都明白了这四件事。之后,我们将继续,现在我们将在这里创建一个非常简单的应用程序,其中需要一些前端,以及我们需要在这里创建后端API。好了,是的,兄弟们。所以,现在我想和你们聊聊。时不时地,我会和你们聊聊,这样,兄弟,你们的注意力就不会分散。听着,到目前为止,一切都很好。如果你们看,你们已经学会了在后端创建一个服务器。你们在这里看到了它的基本编程方式。如何连接到数据库,以及如何在数据库中存储数据。
你可以存储它们,这里已经开始出现这么多东西了。视频的时长大概会在 2 到 3 小时之间,我不知道确切的时长是多少。所以现在看看,如果 2 到 3 小时能学到这么多东西,那进步就很大了。以前你没看这个视频的时候,你不知道这么多东西,但如果你现在学会了这些,那就意味着你在慢慢地学习。记住一点,后端是一个非常大的技能,要掌握它,或者掌握任何技能都需要时间,而且是相当长的时间。你选择任何一个技能,如果你想掌握它,都需要时间。真的需要时间。而且你必须投入时间。如果你想在两个半小时内掌握某个技能,那是不可能的。我告诉你,会发生什么?你看,情况是这样的,当你去参加任何工作面试时,假设我们有一个职位,年薪大概是 3.5 万卢比,那么会有面试,肯定会有面试。在那里,你会被问到两三种类型的问题。会有技术面试、个人面试、人力资源面试,所有这些环节都会在那里进行。好的,这是 3.5 万卢比年薪的面试。如果我设定一个 10 万卢比年薪的面试,你将获得 10 万卢比的年薪,那么面试会怎么样?会很难,肯定比 3.5 万卢比年薪的面试要难。好的,如果我在这里安排一个 40 万卢比年薪的面试,那么它会比 3.5 万卢比和 10 万卢比年薪的面试都更难。好的,如果年薪是 1 亿卢比,那么面试会有多难?会非常非常难。如果我把它提高到 2 亿卢比年薪,会更难。如果提高到 5 亿卢比年薪,会更难。所以你可以理解,年薪越高,面试就越难,候选人就需要付出更多的努力。对于 3.5 万卢比年薪,你需要付出较少的努力。对于 10 万卢比年薪,需要付出更多努力。对于 20 万卢比年薪,需要付出更多努力,对于 40 万卢比年薪,需要付出更多努力,对于 1 亿卢比年薪,你需要付出更多的努力。所以,你想要的年薪越高,你就需要付出越大的努力。而且必须坚持不懈地努力。你不能在那里分心,觉得“哦,这个东西太难了,我放弃吧”。事情不是这样的。我知道你可能一直以来都做得很好。如果一切顺利,那太好了。但如果心里有一点点怀疑,“哎呀,这越来越难了”,那就不要这么想。你可以做一些事情。如果你在这里谈论后端,后端过一段时间也会变得有点难。但一旦你的基础打牢了,后端就会变得容易。一旦你掌握了它,后端就会变得容易。这是所有技能都会经历的过程。开始时容易,中间会变难,然后当你度过那个阶段,后面的东西就会开始变得容易。所以这可能是一个有点困难的阶段。没关系。之后事情会变得容易。只记住一件事,兄弟。你想要的年薪越高,你想要的工作越好,你就需要付出越多的努力。在这段旅程中,只有一件好事会发生。你会努力,我也会让你努力。只记住一件事。不要放弃这个视频。一旦你放弃了这个视频,你迄今为止付出的所有努力都将白费。如果你觉得“哎呀,我明天再做吧”,那就今天做。今天就做,今天就完成。你不会把任何事情留到明天或后天。你今天会做任何事情。今天有一个很好的说法:做任何事情或开始任何新事情的最佳时机是什么?就是现在。就是现在。如果你想做任何事情,就现在开始。现在就开始。不要等到明天或后天。你想完成任何工作,就现在完成。不要拖到明天或后天。拖到明天或后天的意思就是你不会去做。就是这样。所以兄弟们,不要把事情拖到明天或后天。今天就完成它。今天你会全力以赴地完成它。今天就必须完成。我不是说你今天必须看完整个视频。不,可能今天看不完。即使你连续观看,也可能看不完。但你今天的主题可能是“我们今天需要创建一个项目”。那么这个项目你今天就会完成。这就是我们要做的。好的,我们将创建一个非常小的项目。项目是什么?这是一个简单的项目,用户可以创建帖子,并且可以正常查看他创建的所有帖子。就像 Instagram 一样,在 Instagram 上你可以创建多个帖子,并且可以看到你创建的所有帖子。我们将在后端实现同样的功能,并开发一个全栈应用程序。这就是我们要做的。那么会发生什么?会发生什么?现在我们来详细解释一下。我们需要创建一个应用程序。这个应用程序目前只有两个页面。这是一个页面,这是另一个页面。一个应用程序里有两个页面。一个页面是“创建帖子”页面。这是我们的“创建帖子”页面。这是我们的“创建帖子”页面。还有一个页面。这个页面是“动态消息”页面。所以这里是“动态消息”页面。那么在“创建帖子”页面会发生什么?当用户来到“创建帖子”页面时,他会看到一个用户界面。用户界面是这样的:这里有一个表单。这里有一个表单,表单里有三样东西。三样东西是什么?我们有两个输入框。一个输入框。你在这里输入什么?你输入图片。你想创建带有图片的帖子,你需要一个输入框。第二个输入框是用于标题的。所以还有一个用于标题的输入框。最后,这里有一个按钮。这个按钮是用于提交的。提交。所以这里有三样东西。在一个表单里,有一个输入框。你可以在那里选择图片。然后你输入你想创建的帖子的标题,最后是一个提交按钮。当你点击提交按钮时,带有图片和标题的帖子就会被创建,并且我们会将数据保存在 MongoDB 中。是的,这是图片。这是它的标题。我们将把这些数据保存在我们的数据库中。然后是我们的“动态消息”页面,我们在这里的“动态消息”页面。在这里,我们会显示我们的图片。所以我们在这里显示的将是我们的图片。这就是我们的图片。这是我们的图片,同时还有我们的标题。所以我们也会在这里显示标题。所以现在看看,有多少帖子,所有这些,所有我们的帖子,所有我们的帖子,我们都会在我们的“动态消息”页面上显示。如果有 10 个帖子,我们会把这 10 个帖子都显示在我们的“动态消息”页面上。如果有 100 个帖子,我们会把这 100 个帖子都显示在这里。这就是我们要做的。好的?这是目前的主要想法。我知道这不是一个很大的应用程序。但对于初学者来说,这是一个很好的应用程序。你将在这里进行大量的练习。在这件事中,我们还需要理解一件事。在这个整个应用程序中,我们需要理解一个概念:云存储提供商。那么云存储提供商是什么?如果我们在这里谈论的是什么?我们在这里谈论的是云云存储提供商。云存储提供商。那么云存储提供商是什么?你可以把云存储提供商看作是你给它文件。你给云存储提供商什么?你在这里给文件,然后它会返回给你一个 URL。什么意思?你看,我们收到的图片,也就是说,用户会创建一个带有图片和标题的帖子。那么这张图片,我们会把它给谁?我们会把它给我们的云存储提供商。我们会给云存储提供商什么?我们会把图片给云存储提供商。给谁?我们会把这张图片给云存储提供商。云存储提供商会返回给我们什么?它会返回给我们一个 URL。所以我们会得到一个 URL。如果我们访问这个 URL。URL 是什么意思?链接。所以我们会得到一个链接。如果我们访问这个链接,那么我们就可以访问我们给云存储提供商的同一个文件。好的。那么这意味着什么?这意味着,我们创建帖子时使用的图片,我们不会将其存储在我们的服务器上。我们会把它存储在哪里?我们会将其存储在我们的云存储提供商那里。我把我的图片存储在云存储提供商那里。作为回报,云存储提供商会返回给我一个 URL。这就是我们的情况。所以返回的这个 URL,我会保存在我的数据库中,而不是图片。我们不会把图片保存在数据库中。记住,图片文件,我们不会把它存储在我们的数据库中。我们会把图片的 URL 保存在我们的数据库中。好的。那么我们为什么不把图片保存在数据库中?因为你的数据库不是为存储文件而设计的。数据库不是为这个目的而设计的。因此,我们不存储图片。我们会在这里保存图片的 URL。那么我们在这里会做什么?好的,我们不能把图片保存在数据库中。那么我们能把它保存在服务器上吗?不,我们也不会把它保存在服务器上,因为我们没有 SSD 或二级存储。我给你看一样东西。等一下,我给你看一样东西。当 AWS,我们使用 AWS 的地方。所以这是我的 Chrome 浏览器。不是 Chrome,这是 Brave。我打开 Chrome。然后我登录我的 AWS 账户。等我两分钟。我登录给你看,兄弟,当我们部署一个服务器时。AWS,这是一个很棒的东西,非常棒的东西。我们在这里运行着非常大的服务器。所以当你部署一个服务器到 AWS 时。在部署时,它会询问你机器配置,也就是说,你想创建什么样的机器,那台机器是什么,我在这里告诉你。所以请稍等,我将在这里告诉你很多事情。所以弹性容器服务,以及如果我在这里进入任务定义,创建新任务。好的。那么现在你看到的这个面板,在这个地方,你看到的这个面板,这里有什么?这里有,我们将看到,在这里,如何部署一个服务器。这些东西都会被问到。那么这些东西是什么?那么它会问你,你将在什么操作系统上,什么架构上部署你的服务器?你想要多少 CPU?那么你可以告诉我这里有多少 CPU,想要 16 个 CPU 吗?好的,放 16 个 CPU。那么你想要多少内存?如果你想要多少内存,你可以把它放在这里。你可以简单地把它放在这里,比如 60GB 内存。然后如果你想选择其他东西,你可以选择。听着,我的意思是?当你部署一个服务器时,你有三个选择,三个东西:你想要部署服务器的机器上,你可以放三样东西:第一个是你的操作系统,第二个是会有多少个 CPU,以及有多少内存?这里说的是内存,指的是主内存,而不是二级存储。这里说的是内存,内存会有多少?你的 SSD 存储或硬盘存储,它根本就不在那里。它根本就不在那里。在生产服务器上,只有三样东西:你的操作系统,有多少个 CPU,以及有多少内存?二级存储根本就不在那里。而且,你知道吗?你所有的文件,你所有的文件,比如图片。图片是什么?它是一个文件。文件最终存储在哪里?存储在二级存储中,SSD 硬盘中。所以,因为我们的服务器根本就没有二级存储,在生产环境中,你把它保存在哪里?因此,我们不把图片存储在服务器上,而且数据库也不是为存储图片而设计的,所以我们也不在那里存储。为存储图片而设计的,是你的什么?云存储提供商。所以我们把图片存储在云存储提供商那里,云存储提供商会给我们一个 URL 作为回报,然后我们会把这个 URL 保存在我们的数据库中。这就是我们要做的。现在,云存储提供商有很多。如果我在这里打开 Brave 给你看。所以这是我们的 Brave。然后我打开 Brave。所以你看,如果我在这里搜索云存储服务提供商。那么云存储服务提供商,那么就会出现云存储价格,所有 S3,所有这些。那么我们有哪些云存储提供商?我们有 Google Drive。Dropbox。Microsoft OneDrive。所以这些东西你都知道。但我们在这里要用的是什么?是 ImageKit。ImageKit 是我们的另一个云存储提供商,我们可以在那里存储我们的文件,ImageKit 会作为回报返回给我们一个 URL。所以我们将在这里使用 ImageKit。所以我们将在这里使用 ImageKit。现在,ImageKit 是什么?ImageKit 是一个简单的云存储提供商,你给它一个链接,呃,不是链接,你给它一个文件,然后 ImageKit 会作为回报返回给你一个 URL。所以首先,你需要在 ImageKit 上创建一个账户。我一如既往地已经创建了账户。我只是登录。登录后。所以现在你看,我的媒体库里已经有很多了,如果我进入媒体库,我经常使用 ImageKit。所以我的 ImageKit 里有很多文件。当你第一次创建账户时,你不会在这里看到这么多文件。这里什么都看不到。我经常使用 ImageKit,所以你会看到这么多文件,这么多文件夹。所以你只需要做的是:去 ImageKit。去 ImageKit,然后创建一个账户。然后我们再继续谈。所以现在,只需要创建一个账户。在 ImageKit 上创建一个账户,然后我告诉你接下来该做什么。那么我们创建应用程序的主要想法,应用程序是如何创建的?我已经告诉你主要想法了。现在,我们要用它来创建一个应用程序。所以你看,我们先创建它的后端。我们先创建它的后端,然后我们在这里创建它的前端。那么后端要做什么?后端需要创建一个 API。这个 API 会做什么?这个 API 会创建两个 API。第一个 API 会创建一个帖子。第二个 API 会显示所有帖子。获取它们的数据。所以需要创建两个 API。一个 API 会创建帖子。第二个 API 会获取所有已创建帖子的数据。所以我们需要创建这两个 API。所以我们来到 VS Code。来到 VS Code,然后我们从头开始。所以我们回到 Clear npm init。就像我们初始化一个 Node.js 应用程序一样。我们需要一些包。npm install express。我们将在这里安装 express 包。同时,我们的 mongoose 包。
也正在安装。那么,听着,Express 和 Mongoose 两者都将安装。Express 和 Mongoose 安装之后,我们有一个基本的服务器代码,即在 SRC 文件夹内,apps 文件,apps 文件,我们在这里将 require Express 等于 require require Express。Express require 之后,我们创建了 const app 的实例 Express,然后 module.exports app 我们在这里已经创建并导出了。之后,我们将再创建一个文件,文件名为 server.js。在 server.js 里面,const app 等于 require,我们在这里将 require SRC 文件夹内的 app 文件。很好。那么,我们在这里 require 了 app,require 之后,app.listen 端口号 3000,一个回调函数,在回调函数里面,我们可以添加“Server is running on port 3000”。很好。那么,现在如果我在这里启动服务器,服务器就会启动。
但是,创建服务器并启动服务器之后,我们的一个主要任务是连接到数据库。那么,连接数据库的逻辑是怎样的呢?你会在 SRC 文件夹内再创建一个文件夹。文件夹的名字叫做 DB。在 DB 文件夹里面,我们创建一个文件。文件叫什么名字呢?db.js。很好。在 db.js 里面,我们在这里 require Mongoose 等于 require。然后创建一个函数。异步函数。函数的名字我们在这里叫做 connectDB。参数本身不需要。然后我们在这里会说 await mongoose.connect,在 mongoose.connect 里面,我们将使用我们的 URI。好的,这个 URI 从哪里来呢?我们已经设置了 MongoDB Compass,在 MongoDB Compass 里面,这是我们的集群。复制连接字符串。复制连接字符串之后,我们在这里将使用的数据库。数据库的名字我们在这里叫什么呢?我们在这里将给数据库起一个名字。比如说 Project One。好的?那么 Project One 我们在这里将作为数据库的名字。所以 Project One 将是我们的数据库名字。并且,每当它连接成功后,连接之后,我们在这里会 console.log “Connected to DB”。很好。
那么,现在我的这个函数,我将从这里导出。为了导出,module.exports。ConnectDB 函数被导出了。导出之后,来到 server.js 文件,const connectDB,我们将 require connectDB 函数,require 之后,我们将调用 connectDB 函数。很好。那么,听着,现在如果我启动服务器,为了启动服务器,npx nodemon server.js,那么我的服务器就已经在这里启动了。很好。那么,很好。现在我们已经在这里启动了服务器。
现在不要睡。如果你在睡觉,就醒来。不要睡。因为现在我们在这里将开发一个 API。我们将开发哪个 API 呢?就是我们的帖子将要创建的那个。现在告诉我一件事,我们的帖子里面将会有两样东西。一个是我们的图片,另一个是标题。这两样东西我们都会有。那么,这意味着我们不会存储图片的 URI,我们不会存储文件。请注意。我们在这里将存储 URL,另一个我们会有的是标题。所以图片的 URL 和标题,这两样东西将存储在一个帖子里面。那么这会存储在哪里呢?在数据库里面。是的,我们将在数据库里面存储。那么,如果你在数据库里面存储任何东西,你首先需要告诉数据库,你将如何存储。为此,我们创建什么呢?Schema。为了创建 Schema,我们需要创建一个文件。我们将在 Models 文件夹里面创建文件,在 Models 文件夹里面,我们将创建一个名为 post.model.js 的文件。那么,好的。很棒。
现在我们来到这里。const mongoose,再次 require。等于 require mongoose。Mongoose require 之后,现在我在这里会说 postSchema 等于 new mongoose.Schema。就像我们之前做的那样,现在我们在这里也是这样做的,我需要在我的数据库中存储一个帖子的数据。所以首先我需要告诉数据库一个帖子会是什么样子。例如,一个帖子看起来会是这样:我们有一张图片。我们将保存图片的 URL。同时也会有标题,并且标题将是文本格式,字符串格式。那么在这里我们会有什么呢?图片。图片会是什么格式?URL。URL 是什么格式?字符串格式。所以我们将在这里以字符串格式存储。然后在这里我们会有什么呢?标题。因为标题在这里会是什么?字符串格式。很好。那么,postSchema 里面会有两个属性。一个是图片,另一个是标题,这两者我们都将存储。
那么,在此之后,如果我在这里继续,我们的 Post Model,我们在这里将创建 Post Model。那么,postModel 等于 mongoose.model,现在我们在这里,哦,我可能没有告诉你,这个字符串里面的这两个东西是什么?那么,现在听着,实际情况是,我们在这个字符串里面写的“Post”是什么?如果我稍微谈谈它,因为它是写在字符串里面的“Post”。它意味着什么?听着。你不会在你的应用程序中只创建一个帖子。你会创建很多帖子。那么,在你的应用程序中,将来,现在我们只有帖子。将来也会有用户。所以我们会有用户数据。那么,用户数据可能是什么样子?我来告诉你。看,我们现在有一个帖子数据。帖子数据是什么样子?它里面有一个图片。我们这里有一个图片,我们以字符串格式存储它,我们这里还有一个标题,我们以字符串格式保存它。现在就只有这些,但是将来我们会有什么呢?将来我们也会有用户数据。所以我们可能会有用户数据。姓名、电子邮件、密码和帖子,这些东西我们将来都会存储。现在不会。我们将在未来的产品中存储它们。那么,看,在这里,我们将在数据库中存储两种不同类型的数据。一个将是我们的帖子数据,其中将包含图片和标题。另一个将是用户数据,其中将包含姓名、电子邮件、密码和帖子。我们将在这里存储这么多数据。
那么,看,数据库只有一个。你有一个数据库。但是你在这里要存储的数据是两种不同的。这是帖子数据,这是用户数据。那么,在这里,你的相同类型的数据存储在一个集合(Collection)里面。数据库里面有一个东西,我们称之为 Collection。数据库里面有一个东西,我们称之为 Collection。就像我们上次在任务中看到的,我们有一个数据库。数据库的名字是什么?Heli。我们有 Heli 数据库,它里面有一个名为 Notes 的集合。你看到的这些 Notes 是什么?它们是集合。当你打开 Notes 集合时,你将在这里看到 Notes 的数据。那么,以类似的方式,当我们将来创建数据应用程序时,我们将有一个名为 Post 的集合。我们将有一个名为 User 的集合。所以在这里,不同类型的数据我们存储在不同的集合中。那么,那个集合将叫什么名字,你在这个字符串中说明。就这么多。它的作用就只有这么多,即集合的名字是什么,你在这个字符串里面说明。就这么多。那么,这个字符串的作用就只有这么多,比如现在帖子的数据将存储在哪个集合里面?它将存储在名为 Post 的集合里面。好的,如果我把它命名为 Mama。那么现在帖子的数据将存储在哪个集合里面呢?它将存储在名为 Mama 的集合里面。但是在数据中,名为 Mama 的集合听起来不太好。所以我们在这里会说什么呢?你将在名为 Post 的集合里面存储数据。是的,当你打开 MongoDB Compass 时,你可能会看到 Posts。也就是说,最后会有一个额外的“s”,这没有问题。MongoDB 会自己添加它。所以这没有问题。但是我们数据库中集合的名字将以 Post 存储。
现在,我们从这里导出已经创建的模型。那么,module.exports postModel 我们在这里进行了导出。导出之后,导出之后,现在我们需要在这里创建两个 API。哪两个 API 呢?一个 API 是我们在这里将创建的表单。这个表单里面会有图片和标题。它将发送到一个 API。那么这个 API 会做什么呢?它将把带有图片和标题的帖子数据保存到我们的数据库中。我们还将创建另一个 API。它将读取我们数据库中所有帖子的数据,并将其作为响应发送。首先,我们来谈谈创建帖子的 API。
那么,看,现在会发生什么?我们在这里首先使用 express.json 这个中间件。express.json 中间件之后,app.post,post 之后,我们在这里会说 createPost。我们的 API 名字是什么?我们的 API 名字是 /create-post。所以这是我们的 API 名字。然后之后我们会有 async request。然后我们谈论 response,然后我们在这里将谈论 request.body 里面将要到来的数据。很好。那么,首先,现在看要做什么?在 request.body 里面,我需要发送两样东西。什么?我的图片文件和标题。这两样东西我需要发送。我们的 API 已经准备好了。那么现在启动一次服务器。我们的服务器已经启动了。来到 Postman。Postman 就在这里。我正在移除这里的 API。在这里我们将使用一个新的 API 方法,Post。我们将使用的 URL 是 localhost:3000/create-post。我们在这里将给出 -post。进入 Body。如果你谈论 Raw 格式,你如何在 Raw 格式中给出文件?文件不会以 Raw 格式发送。你的文件会以 Form Data 格式发送。所以在这里选择 Form Data 格式,然后你的图片,假设我们的一个字段名为 Image,在这里选择文件,你想要在这里分享的文件,你可以在这里轻松分享。那么我来到这里。有一个名为 Images 的文件夹。在这个名为 Images 的文件夹中,我已经有很多文件。我想如果我想展示它,是的,我这里有一些文件。比如说,这是一个文件。那么我现在正在选择这张特定的图片。打开。打开之后,这张图片在这里被选中了。并且我们这里会有一个标题。所以标题我也需要在这里发送。那么标题现在我在这里将分享 test_caption。很好。那么,test caption 我们将在这里分享。现在看,现在将发生的是,图片和标题这两样东西我将在这里发送,这两样东西将去哪里呢?它们将通过 request.body 里面的 /create-post 发送数据。
那么,现在看会发生什么?现在这里会发生一些情况,就是我们创建的这个 API,/create-post。那么之后会发生什么?我们已经在 /create-post 上创建了 API。请求会来到这个特定的 API,并且请求里面会有图片和标题这两样东西。好的?发送了它。发送之后,现在看,我们发送了数据。我们发送了数据,并 console.log 了我们的 request.body。那么在控制台里面应该有数据。这里显示什么?显示 undefined。为什么是 undefined?我们明明发送了数据,我们发送了文件以及标题。这两样东西我们都发送了。那么这里为什么显示 undefined?显示 undefined 是因为,听着,为了让 request.body 中到来的数据可读,我们使用了一个中间件 express.json。由于它,我们的数据变得可读,我们的 Express 服务器能够读取它。但是现在问题是什么?问题是现在数据不是以 Raw 格式到来的。数据现在是以什么格式到来的?Form Data 格式。所以因为数据不是以 Raw Data 格式到来的。这个中间件什么也做不了。现在因为我们正在使用另一种格式,所以我们在这里也需要使用另一种中间件。那么我们在这里使用哪个中间件呢?我们在这里使用一个中间件。它的名字叫做 Multer。
那么,我们将在这里使用 Multer 中间件。所以你需要单独安装 Multer。npm install multer,你在这里安装 Multer。安装之后,const multer,你在这里 require 一次 Multer。require Multer 之后,你在这里会创建一个变量。变量的名字将是 upload 等于 multer。在 Multer 里面,然后你在这里会说 storage,在 storage 里面,你在这里会说 multer.memoryStorage。你在这里会说 multer.memoryStorage。好的。那么,现在如果我们在这里继续讨论,看,upload 变量,在 upload 变量里面,我们在这里会说 storage,在 storage 里面,我们在这里会添加 multer.memoryStorage。那么,现在 Multer 的用途是什么?Multer 在这里的作用是什么?Multer 到底在做什么?我们稍微谈谈这个。看,实际情况是,你这次发送的是什么?你这次发送的是文件。你不是发送普通的文本。你这次实际上发送的是一个文件。那么读取文件的方式也应该不同。你不像以前那样发送文本。你这次在这里发送的是文件,它当然与文本不同。所以读取文件的方式也不同,并且提供给 Express 读取文件的方式可以通过谁的帮助来提供?通过 Multer 的帮助。所以我们现在在这里设置 Multer,以便我们的 Express 服务器能够读取将要到达 API 的文件。那么,你在这里做什么?你将安装 Multer。安装 Multer 之后,你将 require 它。你创建一个名为 upload 的变量,multer storage,multer.memoryStorage。现在我们需要谈谈这个 memoryStorage 是什么,但是现在就写这么多代码。然后之后,我们的 upload,upload upload.single,你在这里会写 upload.single,在 upload.single 里面,在字符串里面,你需要写一个东西,听着,你发送文件的那个 key,比如我们在这里写了 Image,那么你在这里的 key 是什么,你就在这里以字符串格式给出相同的 key 的值。就这么多你需要做。那么,upload.single,你在这里以哪个 key,哪个名字发送你的文件,你在这里就需要给出相同的名字。就这么多你需要做。
现在看,现在如果你 console.log request.body。启动一次服务器。npx nodemon server.js 启动了。服务器启动之后,现在如果我来到 Postman。发送了它。发送之后,现在看,request.body 里面至少这次我们有标题了。文件仍然没有。是的,文件仍然没有到来。我们发送的图片仍然没有到来。但是它正在到来。图片正在到来,但不在 Body 里面。Body 里面没有图片。但是图片正在到来。那么它在哪里到来呢?看,现在我在这里再 console.log 一个东西。console.log request.file。那么当我在这里 console.log request.file 并再次发送请求时。看,这次我有一些额外的数据。那么,这是我们的 request.body,这是我们的 request.body,这是我们的 request.file,在 request.file 里面,这次我得到了实际的文件。那么在这里我有字段的名字,我的文件在哪个字段里面。比如我从前端通过 Postman 在 Image 字段里面发送了文件。那么那个字段就会到我这里。文件的原始名字是什么,我也会知道。编码是 7 位。可能是图片类型。然后我们有一个东西,我们称之为 Buffer。现在你知道这个 Buffer 是什么吗?这个 Buffer 就是你的实际文件。你的这个 Buffer 就是你实际文件的数据。在这里看,这个 Buffer 中还有一些字节没有在这里打印出来。否则它会变得非常大。所以你的这个 Buffer 就是你的实际文件。我们就是需要上传这个 Buffer。上传到哪里?ImageKit。那么在 ImageKit 上要做什么?在 ImageKit 上,我们需要设置这个到来的 Buffer。是的,就是这个。那么这个 Buffer 是什么?这个 Buffer 是你实际文件的数据。我们就是需要上传这个数据到 ImageKit。
那么现在如何上传到 ImageKit 呢?那么现在看,是不是要上传这个文件到 ImageKit?那么为了上传到 ImageKit,我们在这里会说什么呢?在这里你搜索 ImageKit Docs。搜索 ImageKit Docs 之后,你需要点击 ImageKit 的文档。点击之后,你可以将 ImageKit 集成到很多不同的地方,React、Angular、JavaScript、Vue、Next、Android、iOS,但是现在我们将讨论什么呢?Node.js。所以你点击 Node.js。点击 Node.js 之后,一个 GitHub 页面会打开。在这个 GitHub 页面上,如果你来到目录,你就会知道,哦,目录在哪里,他们更新了文档。这在我身上发生过很多次。每当我教授新的文档或任何东西时,在课堂上,在线下中心。
当我在那里教学时,有很多事情会发生,因为我去教东西。因为会发生什么呢?两三个月后,我会回到一个话题。有多个班级在运行。所以,如果两三个月后我回到一个话题,那么很有可能它的文档已经改变了。就像现在发生的那样。这里是实时发生的。我现在看到,是的,它的文档已经改变了。以前它有目录和很多东西,但现在他们删除了目录,我必须直接看,看看他们是如何实现的。所以没问题。一个好的开发者就是那种,即使文档改变了,也不会害怕,而是会弄清楚。
所以,你看,现在的情况是,首先我们必须在这里安装。安装什么?ImageKit。ImageKit 的文档,我们将首先在这里安装 ImageKit。所以,我们将在那里安装 ImageKit。所以,npm install @imagekit/nodejs。所以,我们将在那里安装 Node.js,并且我们已经安装了 ImageKit 的 Node.js SDK。安装后,我们现在要做什么?它的用法是什么?所以,clients.file,好的,私钥,这是默认的,可以省略。好的,所以现在如果我们在这里谈论如何设置 ImageKit,那么很好。
所以,设置 ImageKit 的代码是这样的,但这段代码不会起作用。而且,我们将在哪里写代码?听着。ImageKit 是什么?首先,我们来谈谈它的根源。所以,ImageKit 对我们来说是什么?它是一个通用的,它的名字是什么?云存储提供商。ImageKit 最终是什么?它是一个云存储提供商,我将在那里存储我的文件,作为回报,它会给我一个 URL,然后我将使用那个 URL。一个简单的故事,它是一个云存储提供商。
现在的情况是,我们还有其他的云存储提供商。有哪些?我们有 Cloudinary。所以,我们的 Cloudinary 是一个云存储提供商。现在我在这里看到了一件事,我搜索了 Cloudinary,但 ImageKit 出现了。为什么?因为它被赞助了。他们已经定位了。营销中有很多东西。这是其中一部分,即搜索 Cloudinary 时出现 ImageKit。所以,人们会使用他们找到的东西。这是其中一个方面。所以,Cloudinary 是我们另一个云存储提供商。现在,如果我想使用它,我可以使用它。除此之外,还有 AWS S3。如果我在 AWS S3 上也使用了 ImageKit,好的,不是 ImageKit,而是我们自己的云存储提供商 S3,它也是一个云存储提供商。所以,我们有很多云存储提供商,但我们使用哪个取决于定价和服务质量如何。就像现在,ImageKit 的定价很好,我们没有看到任何问题。我们目前也使用 ImageKit,但因为它的定价很好,没有问题,所以我们可以使用它。但是,如果将来 Cloudinary 能提供更好的定价和更好的服务,我当然会转向 Cloudinary,或者我也可以转向 AWS S3。
谁的定价和服务更好,我就转向哪个云存储提供商。这没什么问题。就是这样。每个人都想省钱。每个人都想要好的服务。所以,谁能以较低的价格提供高质量的服务,开发者就会选择他们。为什么不呢?当他们的运营成本降低时,每个公司都会这样做。这是公司。这是公司。这是公司。提供低价高质量服务的公司。公司会在项目中选择它。就是这样。
所以,现在的情况是。不一定是我们总是将 ImageKit 用作云存储提供商。也许明天或后天,或者一段时间后,我们会开始使用 Cloudinary。之后,如果 Cloudinary 不能提供良好的服务,S3 能以好的价格提供高质量的服务,那么我们就会转向 S3。所以,我们使用哪个云存储提供商并不固定。
所以,现在的情况是什么?你看,对于那些你不确定是否会永久使用它们的服务,你会将它们的代码写在单独的文件夹里。在哪个文件夹里?在 services 文件夹里。而且,我们在这里谈论存储相关的东西,所以 storage.service.js,storage.service.js,我们将创建一个特定的文件,并在该文件里写 ImageKit 的代码,但我们为什么要在 services 文件夹里创建这个文件呢?因为我们不知道,今天我们使用 ImageKit,但也许明天我们会使用 Cloudinary。后天我们会使用 S3。所以,我们在这里使用哪个云存储提供商并不固定。所以,无论你使用哪个云存储提供商,你都会在这里写它的代码。
例如,我需要在这里使用 ImageKit。所以,首先我会在这里,我会在这里 require 我的 ImageKit。所以,const ImageKit = require,并在 require 中,我会说 @imagekit/nodejs。我们将在那里 require Node.js,并且 require 后,const imageKit = new ImageKit。而且,你需要在那里提供一些东西。什么?首先,我认为我需要提供。好的。所以,我需要在这里提供私钥。我认为是私钥。我能访问它吗?好的?如果我在这里 require。所以,ImageKit require 的文档已经改变了,会有一些小差异,但那也没关系。我只需要在这里凭据中提供什么?config.privateKey,我的私钥将在这里。私钥将是我的。私钥之后,我需要提供公钥。而且,我还需要在这里提供其他东西。所以,私钥在这里。所以,让我们说私钥将是 process.env.IMAGEKIT_PRIVATE_KEY。好的,我认为我只需要在这里提供私钥。
那么,这个私钥从哪里来?所以,你看,这个私钥将是你在 ImageKit 创建账户的地方。所以,你在 ImageKit 创建了一个账户。好的?所以,你在 ImageKit 创建了一个账户。好的?所以,你在 ImageKit 创建了一个账户。在这里,向左滚动一点,你会看到一个选项,开发者选项。所以,来到开发者选项。在这里,你可以复制私钥。复制时有一个问题,我不记得密码了。所以我总是从 Safari 登录。所以,如果我来到 Safari 上的 ImageKit.io。所以,这是 Safari。我只是不记得密码了。因此,我一直通过 Safari 登录。好的?好的?登录了。登录后,现在如果我回到开发者选项。在开发者选项中,这是我的凭据。所以,我们显示了它。好的?提交了。提交后,我的私钥,我复制了它,然后复制后,我的私钥将是,我可以直接在这里使用这个私钥。所以,这就是我的私钥。
现在,创建私钥后,我将在这里创建一个函数。哪个函数?函数将是 async 函数,我们将在这里命名函数 upload,uploadFile,我们将在那里创建 uploadFile。文件,并且在文件内部,实际上我将发送一个 buffer。我将在这里共享我要上传的文件的 buffer。所以,在 buffer 之后,如果我谈论文档,文档中说了什么?即 client.files.uploadFS,提供文件名。这两样东西,我需要发送文件和文件名。所以,你看如何上传。这很简单。你只需要在这里写 result = await ImageKit.client,ImageKit.client export this this this。好的?所以,我们在这里上传了 ImageKit。ImageKit.client.upload,并且 upload 正在到来。upload 之后,我们在这里有一个选项,文件。所以,文件,我们将说 buffer,然后我们将有文件名。所以,目前我们可以说文件名是 image.jpg。很好。而且,这个函数,我将在这里 export 它。所以,module.exports uploadFile 函数被 export 了。
现在听着。我们在这里做什么?我们还将在这里返回一些东西。返回 result。所以,你看我们正在做什么?我们在这里创建了一个函数,这个函数将要求什么作为参数?一个 buffer。并且,借助这个 buffer,我们将把文件上传到 ImageKit。并且,ImageKit 返回给我们的任何结果,我们都将在这里返回。无论在哪里调用函数。所以,你看,我们创建了函数。创建函数后,在 fjs 中,我将 require 这个函数。所以,const uploadFile = require。在 require 中,我们将说在 src 文件夹内,不是 src,而是在 services 文件夹内,我们拥有的 storage.service 文件,我们将其 require 了。并且 require 后,我们将在 request.file 中获得的 buffer 将被使用。所以,result = await uploadFile,uploadFile,并且我们将在这里选择 request.file.buffer。之后,任何结果,我将在这里 console.log 结果。很好。所以,文件将是。首先,我们启动服务器。我们再次启动了服务器。服务器启动后,现在如果我来到 Postman,并且来到 Postman 后,再次发送请求。并且,这里现在有一个错误,Cannot read properties of undefined reading uploadFile。好的?所以,我们正在遵循文档,但问题是它不起作用。客户端部分在这里不起作用。所以,在存储中,我是否可以?好的?所以,好的。私钥。好的。私钥将在这里。私钥,我们刚刚在这里添加的。好的?所以,这是我的私钥。私钥之后,我们再试一次。所以,Cannot read properties of uploadFile。好的?所以,再次启动服务器。文档没有了,出了一点问题,但会解决的。主要概念永远不会改变。主要概念永远不会改变。文档会不断变化。你必须从中学到东西。所以,Cannot read properties of undefined reading upload。所以,我认为,我们在这里创建了一个 ImageKit 客户端。所以,ImageKit.buildFiles.upload。好的?所以,我也在使用 ImageKit.files.upload。是的。所以,我应该使用 client.files.upload。所以,我只是在这里改变了名字。所以,我在这里使用 ImageKit.files.upload。
现在,如果我们继续前进。所以,来到 Postman。发送了。发送后,我们的文件将开始上传。文件将被上传。并且,任何结果,任何结果在这里,我们都 console.log 了。所以,来到 apps。我们在这里 console.log 了任何结果。所以,console.log 后,Your request request is missing file。好的,这里缺少文件。400。所以,在 uploadFile 中,我们的 buffer 将是,我们在这里发送 buffer。buffer 将在这里,并且我们可以原样发送 buffer。所以,文件正在发送。buffer。好的?所以,再 console.log 一次。别担心,别担心。没问题。这是开发的一部分。文档会不断变化。会更新。需要一点时间。我会解释的。别担心。没问题。好的?buffer 在这里。buffer 也在这里。这意味着文件正在上传。并且,我们的二进制数据,multipart/form-data,this this this,base64 字符串。好的。我们。好的?所以,toString base64,再试一次。很好。现在文件已上传。现在文件已在这里上传。很好。所以,之前的概念还记得吗?文档用完了,没问题。如果还记得一些概念,那么工作就可以完成。
所以,你看,这里发生了什么?我直接传递了 buffer。但 buffer 不能直接传递。所以,现在我做了什么?VS Code 的一个优点是,如果你将鼠标悬停在任何参数上,它会告诉你这个参数可以有哪些类型。例如,你可以提供二进制数据。二进制数据之后,你可以直接提供 HTTP URL 或 base64 字符串。所以,我得到了 buffer。我把它转换成了 base64 字符串。并且,将这个字符串转换为我的图像最终上传了。并且,我得到的结果是,我得到一个 URL。如果我打开这个 URL。
你看,这个 URL 在这里打开了。而且,这个 URL,这里这里的 URL 是从我的 ImageKit 来的。这个 URL 是从哪里来的?在 ImageKit。同样的方式,ImageKit 是一个云存储提供商,所以它会给你两种类型的图像。一种是原始图像,另一种是缩略图。缩略图是什么?它尺寸较小。也就是说,当你加载它时,它会更快地加载,而且尺寸也较小。当然,你已经知道了。这是你的原始图像,这是你的小版本。所以,这两种图像都可以使用。所以,ImageKit 的使用方式就是这样。
所以,你看,我们现在要存储什么?我们要在那里存储 URL。所以,你看,在我们的 apps 文件中,到目前为止我们做了什么?我们设置了 ImageKit 账户。设置 ImageKit 账户后,借助私钥,我们在 storage.service 文件中创建了 ImageKit 的 SDK。在 services 文件夹内的 storage.service 文件中,我们设置了 ImageKit。在导入时只是有点问题。所以,对于导入,我们解构了 ImageKit 并 require 了它,并且 require 后,我们使用私钥进行了设置。现在要注意一件事,谁拥有这个私钥,谁就可以上传任何东西到你的账户。就像我现在上传的这张图片,它出现在我的媒体中。你看,这张图片开始在这里显示了。所以,谁拥有这个私钥,谁就可以在你的账户中上传任何东西,并且删除任何东西。可以上传你所有的存储。所以,它会上传,那有什么问题?让它上传,我们有什么问题?问题是,你必须为你上传的任何东西付费。ImageKit 会免费为你做 5GB 的工作。但是,一旦你的工作超过 5GB。所以,如果我来到 ImageKit 的定价。我在这里搜索 ImageKit 定价。所以,定价计划。如果我在这里谈论 ImageKit 的定价。所以,这是 ImageKit 的定价计划。在这里,你将获得多少 GB 的免费存储?3GB 的免费存储和 20GB 的带宽。每月 9 美元,如果你在这里看,你将获得 10GB 的存储和 40GB 的带宽。这里有很多这样的东西。所以,你使用的存储越多,你就需要支付越多。所以,如果你的私钥泄露了,那么它可以在你的账户中填充很多垃圾。它会上传 2 到 3GB 的电影。这是一个问题。所以,我们不会公开这个私钥。我们所有的私钥都存储在我们的 .env 文件中。
那么,如何保存 .env 文件呢?你看,你会创建一个文件,并在该文件中创建一个变量。变量的名字是什么?IMAGEKIT_PRIVATE_KEY。你正在创建它。如果 IMAGEKIT_PRIVATE_KEY 是你的变量,在这里设置它的值。所以,这里将是你的私钥。在 .env 文件中,你不会看到密钥。我下载了一些扩展,所以它不会显示。同样,你的数据库 URL,这个数据库 URL,你也不会公开写在代码里。你也会把它放在 .env 文件里,这样就没有人能看到它了。现在,我们将在稍后讨论如何不让它被看到。但是,我们的凭据相关的东西,我们所有的私钥都放在 .env 文件里,而不是写在代码里。所以,我们的 MongoDB URL,MONGO_URI,我们也会把它保存在 .env 文件里。
现在,你在 .env 文件中创建了两个变量。变量的名字是什么?IMAGEKIT_PRIVATE_KEY 和 MONGO_URI。现在,要使用这两个变量,在哪里使用它们?我需要在我的 db 文件夹里使用一个。我需要在这里使用一个,在 db 文件夹里的 DB.js 文件里。
并且我需要在这里使用一个存储服务文件。那么现在如何使用它呢?所以听着,在 ENV 文件中,你可以创建变量,但要使用这些变量,你还需要一个包。这个包的名字是什么?`npmi.v`。所以你需要在这里使用 `env` 包。现在听听问题。如果你想在这里使用 `env` 包,并且你正在使用导入语句,那么你没有跟着我。如果你使用导入语句,那么 `.env` 就不会那样工作。你必须自己弄清楚。使用 `require` 会很好地工作。所以使用 `require` 或者弄清楚如何让它在导入语句上工作。所以你已经安装了 `env` 包。现在在这里 `require` 它。你需要 `require` `ENV`,然后在 `ENV` 之后写上 `.config` 文件。那么这是做什么的呢?我们为什么要安装这个包?我们为什么要在这里写 `ENV.config` 文件?所以故事很简单,当你写下这一行代码,`require` 了它并调用 `.config` 时,你就可以访问在 `.env` 文件中创建的变量的值了。否则,你就无法访问它们的值和它们的键。所以,如果我想访问它们,我该怎么写呢?我将在这里写 `process.env.mongo_uri`,然后以同样的方式,在存储服务中,我将在这里写 `process.env.image_get_private_key`。所以你需要在这里写 `image_get_private_key`,然后写 `process`,然后写上你想使用的变量名。就是这样访问的。所以这是我们在生产环境中做的另一件事,我们从不将凭证公开写在代码中。我们总是将它们保存在文件中。很好。现在回到我们的 API。到目前为止,我们在 API 中做了什么?我们已经将我们的图像文件上传到了我们的 ImageKit。上传到 ImageKit 后,我得到了它的 URL。现在我将把这个 URL 保存到我的数据库中。为了保存在数据库中,我已经在这里创建了 Post 模型。所以 `require`,我们将在这里 `require` `models` 文件夹中的 `post` 模型,然后 `require` 了 `post` 模型后,我们将在这里保存一个 `post`。所以 `const post = await postModel.create()`,然后在 `create` 中,我们将说你正在接收的图像将保存在 `result.url` 中,而你的标题将来自 `request.body`,你将在这里保存这个标题。然后我们将返回 `return response.status(201)`。201 将是状态码。为什么是 201 状态码?还记得我告诉过你为什么是 201 状态码吗?因为我们在这里创建了一个新资源,所以这里是 201 状态码。然后我们将发送一个消息。消息是什么?消息将是 "Post created successfully",同时我们还将在这里共享我们创建的帖子的数据。很好。所以你创建了一个 API。API 中发生的事情是图像和标题会进来。你将图像上传到 ImageKit。ImageKit 会返回一个 URL。你将把那个 URL 保存到你的数据库中,并且你将把标题保存在数据库中。最终保存的帖子将被返回,并且也会保存在数据库中。所以这个 API 最终创建好了。如果我访问这个 API。所以 `FormData`,在 `FormData` 中我们有图像。假设我正在更改图像。我们正在使用新的图像。我们选择这张图片。打开它。打开后,我将只保留一个文件,而不是两个文件。我们正在上传单个文件。文本标题暂时保留。发送。发送后,我们的图像服务器已关闭。`npx nodemon server.js`。我们启动了服务器。启动服务器后,现在如果我发送它,我的图像将首先上传到 ImageKit,然后会有一个链接,我们将使用该链接保存在我们的数据库中。现在图像链接在这里。如果我打开它,这就是图像。它保存在我们的 ImageKit 上。而它的标题应该是这个标题。那么这个图像是否已保存到数据库中?是的,已经保存了。如果重新加载,重新加载后,我有一个名为 `projectOne` 的数据库。如果我打开它,在 `posts` 中,这是我的图像 URL,这是我的标题。所以我们终于在数据库中创建了一个帖子。在数据库中创建帖子后,它的标题和所有这些东西都已创建。而我们实际的图像文件保存在哪里?我们将其保存在我们的 ImageKit 中。所以如果你去 ImageKit 看一下,这是你的文件,而你将这个文件的 URL 保存在你的数据库中。这就是我们所做的。我们将文件保存在云存储提供商那里,并将文件的 URL 保存在数据库中。所以希望你理解这一点。现在,我们将在这里创建一个 URL。URL 是什么?或者我们将创建另一个 API `app.get()`。这是一个 `GET` 方法。那么在这种情况下会发生什么?在这种情况下,所有你创建的数据,或者可以说所有你创建的帖子,都将通过这个特定的 API 返回。什么意思?意思是从服务器到前端,当我们使用 `GET` 方法时,数据是从服务器发送到前端的。你睡着了吗?我正在和你说话。你睡着了吗?醒醒。醒醒。醒醒。醒醒。醒醒。快点,快点,快点,快点醒醒,因为我们的后端即将完成。后端完成后,我们将在这里创建两个 API,我们需要将它们集成到我们的前端。所以如果你睡着了,请醒过来,并且到目前为止我写的所有代码,在这里暂停视频,并实现所有这些代码,看看你的文件是否保存在 ImageKit 上。你必须这样做。如果你认为“我明白了,我稍后会做”,那就错了。你现在就做。如果你现在不做,以后就会忘记。现在就做。一旦你实现了,一旦文件到达 ImageKit,一旦它的 URL 到达数据库,你就可以继续前进。在此之前不要继续。只有这样你才能做到。我知道,我知道。如果你在这里偷懒,并且想“不,我明白了,我稍后会做”,不行。后端就是这样工作的。当你学习后端时,你现在理解的所有东西都必须立即实现。我在线下中心教过很多学生。我教过很多学生。我们以前教的班级,一个班级大概有 120 到 150 名学生。现在我们将其减半。我们将其降至大约 60 名。降至 50-60 名。现在将在线下中心开始新的班级。但以前,当我教 120 名学生时,我知道。我告诉所有人“伙计们,你们学到的任何东西都要练习”。你们要练习。不是所有人都这样做。你知道,如果我告诉 120 名学生,120 名学生都不会听我的。总会有人有问题,或者他自己偷懒,不听我的话。那些因为任何原因不听话的人,无论是因为有问题,还是因为他懒惰,偷懒,无论什么原因,那些不听话的人,那些不自己练习的人,最终都没有成功。最终他们也学不会后端。而那些听我的话,那些能够练习的人,他们就完成了,他们就学会了后端。我当然知道,我教了整个班级,我当然知道谁听了我的话,谁没听我的话,谁最后学会了后端,谁最后没学会后端。我知道。而我不想什么?我不想你看了这么多视频,看了这么多视频后却没学会后端。我绝对不想这样。我想让你看了这个后端视频,并且你学会了整个后端。我想要这个。所以,只要照我说的做。你就会学会后端。只要照我说的做。你学我在这里教的东西,然后练习。你就会学会后端。这是我的保证。照我说的做,照我说的练习。你就会学会后端。你会学会的。相信我,你会学会的。现在继续。我们将创建一个 API。在这个 API 中会发生什么?我们需要获取我们创建的所有帖子的数据。所以 `posts = await postModel.find()`。`.lean()` 和 `.populate()`。`.explain()` 和 `.execute()`。这些是什么?当我们谈论优化时,我们会谈论它们。目前,我们将使用 `.find()`。返回的消息将是 "posts successfully",并且我们将在这里的响应中发送帖子的数据。所以你看,我们创建了这个 API。我们的服务器正在启动。回到 Postman。我们将创建另一个 API。方法是 `GET`,本地 `localhost:3000/notes`。我们发送了它。发送后,这里会显示 "Cannot GET /notes"。不是 `notes`。我们在这里创建了帖子。我们发送了它。发送后,我数据库中保存的所有帖子都会出现。再创建一个帖子。好吧,我们再创建一个帖子。我正在更改文件。比如这个。我们还有一张图片。我们保存了它。而标题,我正在更改标题的值。用 `_2` 发送它。发送后,这将创建另一个帖子。创建帖子后,现在如果我获取它,现在我这里就有两个帖子了。很好。如果我访问这个 URL,我就可以访问我的图像。很好。不错。所以现在我们已经创建了两个 API。我可以通过一个 API 创建我的帖子。通过另一个 API,我可以获取我创建的所有帖子。我在这里创建了两个 API。很好。所以我们的后端,我们的后端就完成了。现在我们将设计它的前端。创建前端后,我们需要将前端和后端都集成到这里。现在你的脑海中可能会有一个小疑问。我们必须先创建后端吗?然后才创建前端?我们能先创建前端吗?然后创建后端吗?答案很简单。一句话,后端先创建。然后才创建前端。只是你养成了一个习惯,先创建前端,然后创建后端。这是一个坏习惯。那个习惯是错误的。你先创建后端,然后创建前端。这就是行业惯例,也是这样做的。后端先创建,然后才创建前端。当后端正在创建时,设计概念也在进行,这样就不会浪费时间。当后端开发人员工作时。当他创建后端时,设计师就开始工作,UI 会是什么样子?UX 会是什么样子?这是设计师的工作。当后端创建时,设计也在进行。设计完成后,后端创建后,就轮到前端了。然后是集成工作。集成可以由前端开发人员或后端开发人员完成。但通常是创建前端的人进行集成。后端开发人员会为你提供 API 文档,告诉你“嘿,这个 API 是这样的。这个 API 做这个。这个 API 需要这种类型的数据。这个 API 将返回这些数据。”他只是创建了文档。前端开发人员通过阅读它们来集成它们。故事就是这样。所以现在,如果我们看看我们,我们已经在后端开发了两个 API,我们已经设置好了 ImageKit。现在我们需要做什么?我们需要在这里创建前端。我们需要在这里创建两个页面。使用 `react-router-dom` 的帮助,我们将创建两个不同的页面。然后,一个页面,在那里我们可以选择图像,输入标题,然后创建一个帖子。这个 UI 将是这样。另一个页面,在那里我们可以看到所有我们创建的帖子。这将是你的第二个页面。我们将使用 React 来创建它。我将共享屏幕。看,你现在看到的整个代码都是我们后端的代码。所以后端代码,我正在创建一个新文件夹。假设我们在这里创建了一个新文件夹。文件夹的名字是 `backend`,然后将我所有的文件都移到 `backend` 文件夹中。很好。移动到 `backend` 文件夹后,我将创建另一个文件夹。文件夹的名字是 `frontend`,然后现在如果我在这里进入。所以在这里创建。`cd` 我们先进入 `backend` 文件夹,然后 `npx nodemon server.js`。启动服务器。我将创建一个新终端。在新的终端后,我们将进入 `frontend` 文件夹,然后在这里我说 `npm create vite@latest`。`@latest` 之后,我们可以使用 `use` 和 `.`。好的?所以,即使你不会 React,也没关系。我不会使用非常高级的用法。我在这里使用的任何东西,只要你跟着我。我不会使用非常高级的 React。我使用的任何东西,你都会清楚。不要太担心。如果遇到很多问题,只要跟着我写的代码。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用非常高级的 React。只要你跟着我。我不会使用
是的。现在我们来看看这里要做什么?我们需要在这里引入一些来自 React Router DOM 的组件。看看我们在这里从 React Router DOM 引入什么?我们将引入 BrowserRouter 作为 Router,还需要 Routes 和 Route。好的?所以我们需要这些东西。Router 和我认为这样就可以了。所以是 Router、Routes 和 Route。那么现在我们来看看,我们在这里做什么?我们创建了一些简单的应用程序,或者可以说是一些路由。怎么做的呢?看,如果我访问 /api。现在如果我访问我的前端,它运行在 localhost:5173 上。所以我的 React 应用程序运行在 5173 上。那么如果我来到浏览器。来到浏览器后,如果我在这里输入 localhost:5173,我就会看到什么?我会看到 Hello World。很好。那么现在,以类似的方式,如果我在这里创建一个 API,或者说创建一个路由。假设这个将是 About。那么如果我创建 About,这里将是 About Us。那么如果我访问 /about,我将在这里看到什么?About Us 将在这里显示。那么如果我访问 /about,我将在这里看到 About Us。很好。我将在这里看到 About Us。所以我们使用 React Router DOM 的原因很简单,就是为了在不同的路径上看到不同的组件。现在要做什么?我们可以说我们要创建两个不同的屏幕或两个不同的页面。在一个页面上,我们要显示一个表单,用户可以在其中创建一个帖子。而在另一个特定页面上,我们要显示所有已创建的帖子。我们只需要在这里做这些。所以我们将进入 src 文件夹。创建一个新文件夹。我们可以将文件夹命名为 pages。在 pages 文件夹中,我们将创建一个文件。我们可以将文件名命名为什么?假设是 create-post.jsx。在 create-post.jsx 之后,我们可以说 React 函数式组件导出。在 React 函数式组件导出之后,我们将在这里创建一个表单。我们可以将表单命名为,这个将位于 section 中,并且为了创建 section,section,然后在 section 之后,我们将给它一个类。所以类是 create-post-section。好的?所以我们在这里给了 create-post-section,然后我们可以在这里直接给一个 H1,在 H1 中,我们可以简单地说 Create Post。很好。Create Post,然后我们将在这里有一个表单。表单的 action 不需要。你不需要提供 action。然后 action 之后,你将在这里有一个输入字段。所以输入,并且输入的类型将是 file,然后 file 之后,我们可以说 name 是 image,并且 accept image,你将在这里接受 image。所以输入类型是 file,它的 name 是 image,并且它的 accept 是什么?你将只在这里接受 image。然后输入,我们可以说我们的输入将是 type text,并且它的 name 将是 caption。所以我们在这里给了 name caption,并且我们可以说它是 required。required 之后,我们将有一个提交按钮。很好。那么现在,这个我们创建的 create-post 页面,如果我在 app.jsx 中在 /create-post 路径上渲染它。那么我将不会在这里显示 H1 中的 Hello World。在这里,我将显示什么?我在这里的 create-post 组件,这个组件,或者说这个页面将在这里显示。所以这个页面在这里。现在要做什么?在我的 app.jsx 中,我创建的 /create-post API,或者说路由。如果我从前端访问这个路由。所以,而不是 /about,我将在这里说 /create-post,然后输入。那么我将在这里看到一个 create-post 选择文件,一个特定的表单。并且在 placeholder 中,我可以在这里说 placeholder。placeholder 将是 Enter caption。很好。我给了 Enter caption。所以 Enter caption 也在这里反映出来。现在要做什么?借助 CSS,我们要让这个特定的表单看起来好一点。为此,我们有 create-post-index.css。如果我谈论 app.jsx,这里没有链接。在 index.css 中,main.jsx 中,index.css 已经链接好了。很好。那么现在,如果我在这里,create-post-section display flex,flex-direction column,height,width。height 我会说 100%,width 我会说 100%。这与 React 无关。与 React 无关。我们只需要一个前端,我们可以在上面看到如何集成我们的 API。所以为了理解这一点,我在这里快速进行。代码将以 zip 格式提供。所以不用担心。代码将以 zip 格式提供。很好。那么现在,如果我在这里,看,我们的前端现在看起来是这样的。然后在此之后,display flex,flex-direction column。现在我们将说在 create-post 中,我们的表单,表单 display flex。我们在这里提供相同的东西,padding 等等。或者我们可以说 create-post-section input 和 textarea 的宽度是这样的。我正在大量使用 AI。因为我需要快速完成工作,所以我在这里使用 AI。好的。现在,如果我们最终来到这里。所以按钮。很好。所以这个按钮在这里。并且在这个按钮之后,我们的表单已经准备好了。并且在这个表单中,我们只需要修改一些东西。比如它的 font-family。所以我们来到 font-family。并且对于 font-family,我们可以做什么?我们将选择 HTML。HTML,然后选择 HTML。之后,我们的 font-family 将被设置为 system-ui。很好。所以我们将其设置为 system-ui。所以 font-family 看起来好一点。并且在 create-post-section 中,我将在这里添加 gap。所以我的 gap 将是,我们可以添加大约 20 像素。这段代码不是生产级别的。React 的后端代码是生产级别的。视频是关于后端的。我在这里教后端。如果你们说关于 React,我将带你们去看 React。现在听着,我选择了 create-post。我可以选择一个文件。我可以输入 caption。并且我可以提交这个表单。以类似的方式,我们现在需要在这里创建另一个页面。我们的页面将是什么?Feed 页面。所以我们将创建一个名为 feed.jsx 的文件。React 函数式组件导出。并且我们将在那里再次创建一个 section。feed-section。并且在 feed-section 中,看,会发生什么?我们将看到一个 feed。feed 中有什么?将是我们的帖子。将有多个帖子。所以我们在这里创建一个 state 变量。useState snippet。并且我们在这里说 posts。并且在 posts 中,我们在这里说一个 array。然后我们将在这里导入 useState。所以 useState 将被导入。并且我们在这里映射我们的 posts。好的。看,一个 post 会是什么样子?我们在这里将有一个 _id。_id 里面是 1。然后我们在这里将有一个 image。image 的 url 将是什么?也就是说,我们如何将数据保存在数据库中,我们在这里也如何显示。所以这是一个 url。很好。这个 url 在这里。并且我们将在这里像 map 一样列出它。所以我们可以说 map。并且我们将在这里非常容易地进行 map。但是很好。所以我们在这里映射了 posts。映射 posts 之后,现在如果我来到前端,那么在前端,我们只需要渲染这个 feed 页面。在另一个 API 上。我习惯了 API。这就是为什么我反复说 API。但它不是 API,它是路由。所以 feed。并且我们还需要在这里导出和导入 feed 组件。所以导入。导入之后,现在如果我来到特定的前端,feed API。所以,这是我的 feed,特定的路由。然后路由上,我将看到这个特定的 image,这现在完全不对。我们来到这里。并且在这里,我的 feed-section。我们将开始在这里添加 CSS。所以 CSS 我们将说 feed-section。feed-section display flex。flex 之后是 column。align-items,等等。height 和 width。background-color。padding。所有这些都将在这里。然后我们将有 post-card。post-card 将是什么?所以 post-card。好的。并且在 post-card 中,我们将有 post-card H3。好的。所以我们将看到类似这样的东西。并且我们只需要在这里纠正一些东西。align-items center 不行。我们需要将 justify-content 设置为 start。所以所有东西都会来到 start。也就是说,它们将从顶部开始。所以这是很好的。现在听着,我们这里应该有两个页面。我们在这里已经创建了两个页面。一个是 feed,另一个是 create-post。所以如果我在这里向你展示 create-post,那么 create-post 现在看起来是这样的。所以这是一个很好的。这段代码现在看起来是这样的。所以现在,我们的前端,我们在这里已经开发了前端。开发了前端之后,现在我们的后端和前端。我们需要将它们集成起来。那么如何集成?为此,我们还需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,如果我在这里,看,我们的前端看起来是这样的。然后在此之后,display flex,flex-direction column。现在我们将说在 create-post 中,我们的表单,表单 display flex。我们在这里提供相同的东西,padding 等等。或者我们可以说 create-post-section input 和 textarea 的宽度是这样的。我正在大量使用 AI。因为我需要快速完成工作,所以我在这里使用 AI。好的。现在,如果我们最终来到这里。所以按钮。很好。所以这个按钮在这里。并且在这个按钮之后,我们的表单已经准备好了。并且在这个表单中,我们只需要修改一些东西。比如它的 font-family。所以我们来到 font-family。并且对于 font-family,我们可以做什么?我们将选择 HTML。HTML,然后选择 HTML。之后,我们的 font-family 将被设置为 system-ui。很好。所以我们将其设置为 system-ui。所以 font-family 看起来好一点。并且在 create-post-section 中,我将在这里添加 gap。所以我的 gap 将是,我们可以添加大约 20 像素。这段代码不是生产级别的。React 的后端代码是生产级别的。视频是关于后端的。我在这里教后端。如果你们说关于 React,我将带你们去看 React。现在听着,我选择了 create-post。我可以选择一个文件。我可以输入 caption。并且我可以提交这个表单。以类似的方式,我们现在需要在这里创建另一个页面。我们的页面将是什么?Feed 页面。所以我们将创建一个名为 feed.jsx 的文件。React 函数式组件导出。并且我们将在那里再次创建一个 section。feed-section。并且在 feed-section 中,看,会发生什么?我们将看到一个 feed。feed 中有什么?将是我们的帖子。将有多个帖子。所以我们在这里创建一个 state 变量。useState snippet。并且我们在这里说 posts。并且在 posts 中,我们在这里说一个 array。然后我们将在这里导入 useState。所以 useState 将被导入。并且我们在这里映射我们的 posts。好的。看,一个 post 会是什么样子?我们在这里将有一个 _id。_id 里面是 1。然后我们在这里将有一个 image。image 的 url 将是什么?也就是说,我们如何将数据保存在数据库中,我们在这里也如何显示。所以这是一个 url。很好。这个 url 在这里。并且我们将在这里像 map 一样列出它。所以我们可以说 map。并且我们将在这里非常容易地进行 map。但是很好。所以我们在这里映射了 posts。映射 posts 之后,现在如果我来到前端,那么在前端,我们只需要渲染这个 feed 页面。在另一个 API 上。我习惯了 API。这就是为什么我反复说 API。但它不是 API,它是路由。所以 feed。并且我们还需要在这里导出和导入 feed 组件。所以导入。导入之后,现在如果我来到特定的前端,feed API。所以,这是我的 feed,特定的路由。然后路由上,我将看到这个特定的 image,这现在完全不对。我们来到这里。并且在这里,我的 feed-section。我们将开始在这里添加 CSS。所以 CSS 我们将说 feed-section。feed-section display flex。flex 之后是 column。align-items,等等。height 和 width。background-color。padding。所有这些都将在这里。然后我们将有 post-card。post-card 将是什么?所以 post-card。好的。并且在 post-card 中,我们将有 post-card H3。好的。所以我们将看到类似这样的东西。并且我们只需要在这里纠正一些东西。align-items center 不行。我们需要将 justify-content 设置为 start。所以所有东西都会来到 start。也就是说,它们将从顶部开始。所以这是很好的。现在听着,我们这里应该有两个页面。我们在这里已经创建了两个页面。一个是 feed,另一个是 create-post。所以如果我在这里向你展示 create-post,那么 create-post 现在看起来是这样的。所以这是一个很好的。这段代码现在看起来是这样的。所以现在,我们的前端,我们在这里已经开发了前端。开发了前端之后,现在我们的后端和前端。我们需要将它们集成起来。那么如何集成?为此,我们还需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。那么现在,我们在这里将要做什么?我们将集成后端和前端。为此,我们需要另一个包,它的名字将是 axios。所以我们将在这里使用 axios 包。好的,听着。如果你不懂 React,也没关系。视频是关于后端的。现在我们主要需要关注后端。这段 React 代码将以 zip 格式提供。所以你不用担心。代码将以 zip 格式提供。很好。
在 http 冒号//localhost 冒号 3000,这意味着我们正在谈论 localhost 冒号 3000 的服务器。对吗?来自源,那么这里的源是什么?localhost 冒号 5173。听着,我们这里有两个不同的源。我们这里有两个不同的服务器。它们是什么?一个运行着我们的后端服务器。另一个是我们的前端目前正在运行的。所以我们这里有两个不同的源。一个源是 localhost 冒号 3000,另一个源是 localhost 冒号 5173。我这里有两个不同的源。那么这里说了什么?您向后端源发出了一个 http 请求,来自哪里?来自您的前端。它被阻止了,通过什么?通过 CORS 策略。是的,这是默认启用的。因为 CORS 策略是浏览器内置的一项功能。为了用户安全,浏览器会自动实现它。所以,CORS 策略说了什么?CORS 策略非常简单。如果我在这里搜索并向您展示。什么是 CORS?当我搜索这个时,搜索后您将获得所有您将通过 Gemini 搜索到的内容,它看起来是这样的:一种安全机制,允许 Web 服务器告诉浏览器,来自不同域的资源可以与您的 Web 应用程序共享。现在,这里有很多东西可能还无法理解。但是,如果我能向您展示,默认情况下,Web 浏览器会限制网页向不同源的资源发出请求。是的,所以,我们拥有的 CORS 策略。我们拥有的 CORS 策略是什么?默认情况下它是如何工作的?Web 浏览器会限制一个特定的网页向不同源的资源发出请求。这意味着什么?这意味着您的 Web 浏览器,无论您使用什么浏览器,都会限制任何网站或任何网页,使其无法从任何其他源请求任何资源。那么,这在这里是如何应用的呢?这在这里之所以适用,是因为,您知道,我们的前端,我们的前端运行在哪个端口上?它使用端口 5173。它在这里使用端口 5173。所以,如果您从端口 5173 发出请求到哪个端口?端口号 3000。那么,它就不会被视为一个资源。看,我们在这里做了什么?我们使用 axios 发出了一个 GET 请求到 API,到 /posts。这意味着什么?我们正在从我们的后端服务器请求一些数据。我们正在请求一些资源。我们从哪里请求的?从我们的前端。前端运行在哪个源上?5173。而我们的后端运行在哪个源上?端口号 3000。所以,这里的两个源是不同的。这意味着前端有一个单独的源,后端有一个单独的源。因此,浏览器中内置的安全措施,为了我们的用户,不会允许这样做。它不允许做什么?允许您从前端向后端服务器发出请求,让后端在那里提供一些数据。所以,这是默认不启用的。那么,它的解决方案是什么?解决方案非常简单。后端服务器,在后端服务器上,您需要安装另一个包。npm i cors。您在这里安装 cors,安装 cors 后,您将再次启动服务器,npm run dev 或者 nodemon server.js。所以,我们将启动 nodemon server.js,并且在您的 app.js 文件中,您将在这里 require。const cors = require('cors');。在 require 了 cors 之后,您将在这里使用它作为第一个中间件。是的,cors 就像中间件一样被使用。中间件,中间件,中间件,我说了太多次了,我知道。中间件很快就会到来。在这个项目之后,我们需要学习的一个主题是身份验证,而在身份验证中,我们将有中间件。所以,再等一下,中间件就会出现。所以,我们将在这里使用它作为中间件。所以,我们在这里使用了中间件。使用之后,服务器已经在运行了。现在,如果您在这里,在浏览器中,刷新一次页面,您会看到,现在我们在这里获得了数据。而之前出现的 CORS 策略错误现在已经消失了。而我们的 posts 数据,这个 posts 数据也在这里正确地显示了。所以,就像这个 test caption,test caption 2,图像也正确地显示了。所以,现在 posts 中返回的数据,我将用它做什么?我将回到 feed.js,并将返回的数据设置为 posts,并在 posts 中,在 response.data 中,我将在这里设置 posts 数据。所以,现在,如果我在这里刷新,posts 数据将在这里显示,并且所有 posts 都将在这里渲染。现在,我的服务器上有两个特定的 posts,它们都已在这里渲染。我们做了什么?从前端,也就是说,在前端,我们向后端发出了一个 API 调用。这是一个 GET 请求。那是我们的 API。看,GET 是它的方法,它的 API 名称是什么?/posts。源是什么?端口号 3000。所以,这是它的源。所以,在端口号 3000 的 /posts API 上,其方法是 GET。我们向这个 API 发出了请求。这个 API 将返回我们服务器上创建的所有 posts 的数据,我们将该数据设置到我们的 posts 状态变量中,然后我们将在稍后渲染它,其中图像和标题都已在此列出,因此您在这里可以看到这个特定的 post。很好。所以,我们在这里集成了一个 API。现在,我们需要集成另一个 API,我们将在这里共享文件。所以,文件,文件名,在那里我们可以说创建一个 post。要创建 post,我们再次需要 axios。所以,import,我们需要在这里 import,并且我们将在这里 import axios from 'axios'。并且我们需要一个函数。const handleSubmit = async (e) => { e.preventDefault(); }。为什么 e.preventDefault()?因为当我们提交这个表单时,我们的页面不会重新加载。默认情况下,HTML 中,如果您提交任何表单,它会重新加载整个页面。但是 React 的概念是不同的。它说,您的网站不应该重新加载。除非用户想要。除非用户想要,否则您的网站不应该重新加载。所以,我们的网站不会重新加载。因此,当表单提交时,我们将在这里说 e.preventDefault()。所以,我们只需要做一件事,当您的表单提交时,在 onSubmit 上,我们将在这里放置一个函数,handleSubmit。所以,我们将在这里放置 handleSubmit 函数。那么,会发生什么?这个表单,这个表单,当它提交时,这个函数,handleSubmit,将运行,并且 e.preventDefault() 的意思是,当表单提交时,整个页面重新加载,页面将不会重新加载,我们将避免这种情况。也就是说,页面不会重新加载。它提供了一个很好的用途。现在,我们将在这里做什么?const formData = new FormData();。我们将在这里创建一个 formData。创建 formData 后,axios.post,我们创建了一个 API。使用这个 API,我们可以创建一个特定的 post。localhost:3000/create-post。我们将在这里输入 formData。输入 formData 后,现在,无论有什么响应,所以,然后我们可以使用 then console,我认为这足够了。好的?e.target.reset();。现在,我们在这里 console.log 响应。很好。所以,我们在这里 console.log 了响应。响应,我们在这里 console.log 了。很好。现在,如果我在这里来到 Brave 浏览器,然后我转到创建 post。输入。输入后,现在我在这里选择一个文件。文件将是,图像在哪里?在这里,图像。让我们使用这个文件。打开。标题,我们在这里说 test_caption_3。然后提交。提交后,这里应该有一个日志。很好。所以,日志在这里。在我这里,在 data 中,在 posts 中,在 posts 中,我得到了图像的 URL 和 ID。现在,看。发生了什么?我提交了 post,也就是说,我提交了图像和标题。我选择的这个图像和标题。它去了我的表单,也就是说,在表单中,然后通过 API 去了我的服务器。在服务器上,我们上传了图像到 ImageKit。使用返回的 URL,我们使用我们的 post 保存到数据库。然后,我们最终发送了一个响应,说一个 post 被创建了,它的标题是这个。图像 URL 在这里。它的 ID 和版本在这里。现在,如果我在这里来到 /feed,然后来到 /feed,我将在这里看到我的第三个 post。让我们在这里再创建一个 post。我们只需要在这里做一件事。如果 post 被创建,用户应该自动导航到 /feed。为此,我们将 import useNavigate,useNavigate from 'react-router-dom'。我们将使用 useNavigate hook,并且每当有响应时,我们将在这里导航用户到 /feed。很好。所以,我们将用户导航到 /feed。现在,我们回到。只是返回。选择一个图像。这次我们可以选择哪个图像?让我们选择这个。这是我们的一个图像。我们将选择这个图像。打开。打开后,标题 test_caption_4。然后提交。现在,看,当我提交表单时,图像和标题都将通过 API 发送到我的服务器。图像将被上传到 ImageKit。ImageKit 将返回一个 URL。然后我们将把那个 URL 和标题保存到数据库。然后我们将收到响应。并且一旦我收到响应,我们将导航到哪里?到我们的 feed 页面。所以,让我们提交它。提交后,如果我被导航,这意味着一切都正常运行。所以,我被导航了,并且我在这里看到我创建的第四个 post 也在这里列出。很好。所以,您刚刚在这里做了什么?您刚刚创建了一个非常非常小的 MERN 应用程序,它是一个全栈应用程序。在那里,您首先开发了后端 API。然后您在这里创建了前端,然后您将两者集成在一起。所以,很好。练习一下。请注意一件事。如果应用程序看起来很小,无论出于何种原因,它都不是。将来您将在后端创建的应用程序将是巨大的应用程序。让我先放大屏幕。看,您将来要创建的应用程序将是巨大的。但是它们的开始是这些小的任务,这些小的应用程序。现在,听着。在后端,您将编写一些代码,这些代码真的会让你头脑发昏。为什么?因为您的头脑还没有准备好理解并实现后端到那个程度。您还需要为您的头脑做好准备。您将如何做到这一点?构建这些小的应用程序。构建一次,再构建一次。当您第二次构建时,事情会变得更清楚,更多。所以,构建这些东西。一遍又一遍地观看视频。暂停,看看这里的代码是如何编写的。看看,一遍又一遍地构建东西。自己实现新功能,看看我如何自己实现东西。所以,不要认为这个应用程序,我刚刚创建的,是一个小应用程序,我知道它是如何创建的,我以后可以创建它。不,现在就做。在后端,您停止与我一起做的地方,后端也将被落下。请注意这一点。您必须做。您必须创建这个应用程序,我刚刚创建的,并且必须创建它。没有其他选择。也没有其他选择。您也没有其他选择。您没有。您必须做这个应用程序,这个任务,并完全实现它。您应该可以在视频描述中找到代码。从那里查看代码,然后实现它。现在,我们将继续下一个主题,它的名字是什么?身份验证。什么是身份验证?以及身份验证系统中存在哪些内容。所以,现在,什么是身份验证系统?以及它包含哪些内容。我们将从这里开始。什么是身份验证系统?我们稍后会谈论它。身份验证系统包含四件事。我们首先将谈论这四件事是什么。所以,听着,这四件事是什么?这四件事的顺序是这样的。首先,如果我与您谈论,首先是验证。您的身份验证系统将首先执行验证。然后我们在这里谈论验证。然后我们在这里谈论身份验证。最后,我们有的是什么?授权。所以,这些是我们拥有的东西。所以,授权。很好。所以,身份验证系统包含这四件事。验证,验证,身份验证和授权。首先,我们在这里谈论验证。所以,如果我在这里谈论验证,那么验证是什么?所以,看,假设您在这里注册一个用户。您想在这里注册一个用户。为了注册用户,您在网站上看到的任何表单,其中会有一些输入字段。您需要输入电子邮件地址,输入全名,有时您需要输入您的手机号码。所以,让我们假设现在,您需要输入您的手机号码。好的?您需要输入您的手机号码。然后,您将输入您的电子邮件地址,然后输入您的全名,然后输入您的密码。所以,您需要在这里输入一些东西。假设您在这里输入了手机号码 1234567890。这是您的手机号码。您将输入一个电子邮件地址,然后全名,让我们在这里输入 John Doe。John Doe,如果您不知道,他是一位非常传奇的人物。我们以后也会谈论他。所以,您在这里输入了密码 test@123,并且您输入了一个大写字母,以便我们可以进行测试。并且您在这里输入的电子邮件地址是这样的。您输入了这个电子邮件地址。现在,告诉我,这是一个正确的电子邮件地址吗?您输入了其他所有东西。您输入了正确的手机号码。您输入了正确的全名。您输入了正确的密码。但是您输入的电子邮件地址不是电子邮件地址。这是一个错误的电子邮件地址。一个正确的电子邮件地址是什么样的?例如 test@example.com。如果我在这里举一个例子,example@example.com。这是我们这里的一个有效电子邮件地址。所以,验证在这里有什么用?所以,验证在这里的作用是,我们收到的数据,我们收到的数据,它的格式是否正确?我们称之为什么?我们称之为验证。所以,验证是什么意思?验证的意思是,我们收到的数据是否正确?我们称之为什么?在这里是验证。所以,验证的意思是,检查用户提供的数据以及进入服务器的数据,以确定其格式是否正确。我们称之为什么?我们称之为验证。现在,在验证之后,我们在这里谈论验证。验证。现在,验证和验证之间有一个非常细微的区别,但有一个区别。是什么?验证的意思是什么?我们收到的数据是否格式正确?我们称之为验证。那么,验证的意思是什么?我们收到的数据是否正确?我们称之为验证。也就是说,假设用户在这里输入了一个电子邮件地址 unkur@dev.com。所以,他在这里输入了一个特定的电子邮件地址。现在,这个电子邮件地址,这个电子邮件地址,是那个特定用户的电子邮件地址,还是别人的?我们如何知道?我们将向该电子邮件地址发送一个 OTP。发送 OTP 后,如果用户能够再次告诉我们 OTP,那么我们将知道,是的,这个特定的电子邮件地址是那个特定用户的电子邮件地址。所以,我们正在检查用户输入的信息,这个电子邮件地址,是否表明是的,这个电子邮件地址是他的。它真的是他的,还是别人的?所以,信息,可以说,数据,我们收到的。
数据是否正确。我们称检查该数据的过程为?验证。所以你现在在这里理解了两件事。什么?第一个是验证。我们在此检查数据的格式是否正确?我们将整个过程称为?验证。验证意味着您收到的数据是否正确?或者检查过程我们称之为?我们称之为验证。所以希望您已经清楚了验证和校验。这两件事您都清楚了。现在我们来谈谈身份验证。如果谈论身份验证。现在这里将有一个完全不同的例子。看,我告诉你。现在为此,我只需要看。假设我们这里有一个服务器。我们将创建一个服务器。绝对会创建。然后假设我们有不同的用户。一个用户在这里。然后我们将这个用户的名字给了 A。然后我们还有一个用户。假设我们在这里给它命名为 B。然后我们还有一个用户。然后我们在这里给它命名为 C。好的?所以我们这里有三个用户 A、B 和 C 以及一个服务器。很好。所以我们有一个服务器,我们有三个用户。所以现在看发生了什么?现在假设这个服务器,我们拥有的这个服务器是 Instagram 的服务器。什么意思?它是 Instagram 的服务器,我们在 Instagram 上可以创建帖子。所以帖子也可以在这里创建。现在我要问一个简单的问题。只是有点棘手。棘手在哪里?看,我只问一件事。这里将有一个请求。也就是说,这三个用户中的一个会发出请求。我没有告诉你哪个用户将要发出请求。但是会有一个请求。这三个用户中的一个将要向我们的服务器发出请求。然后这里的请求。好的?所以现在请稍等一下。只剩下一点点了。好的?所以看,这是我们的服务器。这是我们的 Instagram 服务器。这个 Instagram 服务器正在收到一个请求。你们中有人现在我听不到。请在评论中告诉我。你们中有人能在这里告诉我这个请求是来自这三个用户中的哪一个吗?直接答案是什么?你不能说。你只能猜测是 A、B 或 C 中的一个。但是当我们有 10 万用户或 1 万用户或 1000 万用户时,我们怎么知道?我们甚至在那里都猜不到,谁的请求可能来自哪里?所以现在这个请求我不能说它是来自用户 A,还是来自用户 B,还是来自用户 C。所以现在这个过程是什么过程?请求来自哪个用户,或者哪个用户正在发出请求,识别它,我们称之为?身份验证。身份验证是什么意思?身份验证意味着识别请求来自哪个用户。我们将这个过程称为?身份验证。我们如何实现这一点?我们将讨论这个问题。现在,身份验证只有一个含义,那就是识别请求来自哪个用户。我们将这个称为?身份验证。现在我们来谈谈授权。我们最后还有一个主题是什么?授权。授权是什么意思?听着。现在我举个例子。看,我们这里的情况是什么?一所大学的教学楼。大学教学楼里主要有三种不同类型的房间。我们有一个教室。我们有一个教室。然后我们这里有一个教职工休息室。教职工休息室在那里。然后我们最后这里是校长室。你可以称之为校长室或董事长室。而我们的大学里有三种不同类型的用户。我们这里有一个学生。然后我们有一个教师。教师。然后我们这里有一个校长或董事长。两者非常相似。所以校长。好的?所以我们这里有一个大学里有三种不同类型的房间,我们这里有三种不同类型的用户。教室、教职工休息室、校长室、学生、教师和校长。这三者,我们有这些东西。现在看,如果我谈论学生,那么学生直接可以进入什么?教室,他们可以直接坐在教室里。他们可以在那里轻松学习。但是学生未经允许不能进入教职工休息室,也不能未经允许进入校长室。但是如果我谈论教师,那么教师可以在教室里讲课。当他们想的时候,他们可以去教室讲课。他们直接可以进入教室。他们可以在教职工休息室里坐着。做他们的工作。但是未经允许不能进入校长室。但是如果我谈论校长,那么校长的情况是,他们可以未经允许进入教室。他们可以未经允许进入教职工休息室,校长室也是他的,所以他也可以未经允许进入那里。所以现在如果你在这里看,有三种不同类型的用户。学生、教师和校长。而且这三个用户都有不同的权限。学生只能进入教室。教师可以进入教室和教职工休息室。校长可以进入教室、教职工休息室和校长室。所以在这里,不同类型的用户可以执行不同的操作,不同的动作。所以现在当你将同样的事情实现到你的服务器上时,如何实现?例如,如果我再次以 Spotify 为例,Spotify 有两种用户。Spotify Spotify 艺术家,我们有一个 Spotify 艺术家。但首先,如果我谈论 Spotify,那么 Spotify 艺术家又来了。好的,我的意思是,如果你谈论 Spotify,那么有普通用户,你可以在那里听歌,听歌,并且可以创建自己的播放列表。但是你不能创作歌曲。但是为了创作歌曲,我们有 Spotify 艺术家,即 Spotify 艺术家,他们是不同类型的用户,他们也可以在 Spotify 上创作歌曲。所以现在情况是什么?情况是,现在我想说的是,当你创建一个服务器时,你会在那里创建不同的用户,并且他们有不同的权限。而整个概念是什么,即你正在创建的不同用户,并且他们将拥有不同的权限。整个事情你称之为?授权。如果用一句话来说,一个用户可以做什么?例如,艺术家可以创作歌曲,也可以听歌。普通用户可以听歌,但不能在 Spotify 上创作歌曲。所以一个用户可以做什么?一个用户不能做什么?我们称之为?授权。身份验证是什么意思?身份验证的意思是,请求来自哪个用户?识别它。我们将称之为?身份验证。然后我们来谈谈验证。到达服务器的数据,到达服务器的数据是否正确?我们将这个过程称为?验证。然后我们来谈谈校验。到达我们的数据是否格式正确?我们将这个称为?校验。所以这是整个身份验证系统的四个核心支柱。通过所有这些身份验证系统,我们可以正确地进行用户授权。我们将开发所有这些东西。我们将遵循哪种身份验证系统?主要有两种。一种是基于会话的,另一种是基于令牌的。我们将遵循基于令牌的。基于会话的是什么?你现在不需要知道。所以不要去了解它。我们将在这里遵循基于令牌的身份验证系统。基于令牌的身份验证系统是什么?如何实现它?首先,我们将理解一些理论。然后我们将使用 JWT 来编码我们的 Express 服务器。现在让我们了解如何在服务器上执行身份验证。看,发生了什么?举个学校的例子。现在在学校,一个学生正在入学。所以当一个学生在学校入学时,他会收到一张身份证。那张身份证上有一个独特的学号。他的全名。他的父母的名字是什么?他的父母的电话号码是什么?以及更多细节,学生身份证上会包含一个特定的用户。这张身份证有什么用?例如,看,现在学校,学生入学的那所学校,如果它有图书馆、游泳池,还有操场或其他功能,计算机实验室,所有这些。所以现在如果任何人,任何学生想要访问这些特定的资源或设施,他们需要什么?他们需要他们的身份证。只有有了身份证,他们才能访问所有这些设施。很简单,如果他们想要访问这些设施,那么你必须证明你是这所学校的学生。所以他们可以通过出示身份证来证明,是的,我们是这所学校的学生。所以这是一个简单的系统。服务器上也是一样,服务器上会发生什么?在服务器上,如果你想访问任何资源,那么谁可以访问资源?例如,我们这里假设是 Instagram。Instagram 的服务器。现在我想在 Instagram 上创建一个帖子。所以要创建一个帖子,Instagram 至少要告诉你,你是什么人?而且 Instagram 至少要验证你是否是有效的 Instagram 用户。Instagram 服务器需要验证。所有这些是如何发生的?所以听着,这里发生的是,当用户首先来到我们的服务器时,假设我们这里有一个服务器。我们这里有一个服务器。这是我们的服务器。然后我们这里有一个用户。所以我们这里还有一个用户。很好。然后我们这里有什么?用户首先向我们的服务器发出的请求是什么?这个请求是注册。好的,注册时会发送什么数据?注册时会发送用户名。所以用户名。然后发送电子邮件。然后发送密码。所以我们在这里分享这些东西。所以当一个用户注册时,当一个用户注册时,他会向服务器发送什么详细信息?用户名、电子邮件、密码以及更多详细信息。但是有了这些详细信息,我们的服务器就会创建账户。保存用户数据到数据库。并在数据库中保存数据后,发送响应。现在这个响应中还包含其他东西。什么?现在这个响应中还将包含其他东西。就像我说的,什么?听着。现在如果我回到我的类比,它的名字是?学校。所以一个学生来到学校。学生会填写他的详细信息。他的父母的名字,他的 T.C. 等等,来自之前的学校。他会告诉学校他的详细信息。学校。学校会在自己的数据库中,无论他们的登记册是什么,都会维护这些详细信息。然后给学生一张身份证,说,是的,如果你向我们出示这张身份证,我们将认为你是我们学校的学生。所以现在你的服务器也在做同样的事情。用户在这里与我们的服务器分享很多他的详细信息。服务器会将所有这些详细信息保存在自己那里。但是服务器会作为回报给你一样东西,它的名字是什么?令牌。它的名字是什么,兄弟们?它的名字在这里是令牌。所以服务器会创建一个令牌。好的,这里服务器创建什么?服务器在这里创建一个令牌。并且在这个令牌里面,就像学生在学校入学时,他得到了一张身份证,这张身份证里有一个独特的东西。所以那个独特的东西是什么?是学号,以及该学生的其他详细信息。所以同样的方式,服务器也会在这里创建一个令牌。服务器在这里创建一个令牌。并且在这个令牌里面,包含用户的详细信息,或者可以说用户的在这里。假设我们的用户是用户 A。所以这里是我们的用户 A。所以这个用户 A,现在服务器创建的令牌,里面的详细信息,你可以说数据是什么用户的?用户 A 的数据将在这里。很好。所以这里是用户 A 的数据。现在服务器做什么?再听一遍,什么?看,用户 A 会向我们的服务器发送注册请求。发送请求后,请求中将包含用户名、电子邮件、密码以及我们用户 A 的很多详细信息。然后服务器会将所有这些详细信息保存在自己那里。并创建一个令牌。这个令牌里面有什么数据?这个令牌里面,无论哪个用户正在注册,也就是说,现在用户 A 正在注册,这个用户 A 的详细信息就在这个令牌里面。然后服务器不会将这个令牌保存在自己那里。它会发送给正在注册的用户。它甚至不会保存在自己那里。所以我们也在做同样的事情,即当一个学生注册时,当他入学时,我们会将他的详细信息保存在我们的数据库中,创建一张身份证,然后将这张身份证交给学生。这样,如果你以后想使用任何资源,想使用计算机实验室,想访问图书馆,想访问游泳池,那么对于所有这些事情,你只需要出示身份证,然后你就可以使用所有这些设施。所以现在听着,用户注册了。注册什么?服务器创建了一个令牌。将令牌给了谁?用户。所以现在服务器,或者说我们的用户,如果用户想访问我们服务器上的任何资源。假设现在是 Instagram 的服务器。那么现在在 Instagram 的服务器上,如果他想创建一个帖子。假设我们的用户,现在这个用户想在我们的 Instagram 服务器上创建一个帖子。那么会发生什么?用户会再次发送请求,但是服务器不会听任何人的。Instagram 的服务器只允许你在登录后创建帖子。所以会发生什么?用户会在这里请求说,是的,我想创建一个帖子。但是服务器根本不会听。为什么?因为我不知道这个请求来自哪个用户。那么用户做什么?用户在这里将他拥有的令牌的一个副本发送到这个特定的请求。现在他是如何发送的?我会告诉你,别担心。我会告诉你,如何将令牌与请求一起发送,我们也会讨论这个问题。所以听着,现在我们的用户,用户会在这里发出一个创建帖子的请求,并且请求会附带我们的令牌。所以当服务器收到这个创建帖子的请求时,服务器会先在这里读取令牌。好的,当它读取令牌时,令牌里面是什么用户的?是用户 A 的。所以这里服务器明白,是的,这是用户 A 的数据。用户 A 正在发出这个特定的请求。然后它允许创建这个特定的帖子。现在我们可以更清楚地理解这一点。看,假设我们这里又有一个服务器。一个服务器有我们这里不同的用户。我们这里有三个用户。假设我们这里有三个用户。用户 A。然后我们这里有一个用户 B。然后我们这里有一个用户,我们称之为用户 C。很好。这三个用户在这里做的第一件事是,他们来到服务器并注册。首先,所有三个人都注册了。现在因为所有三个人都注册了,并且每次注册时服务器都会创建一个令牌,并将令牌发给同一个用户。所以对于这三个人,对于这三个人,我们在这里有一个令牌,不是我们,而是我们的服务器,服务器在这里创建了一个令牌。为 A 创建了一个令牌。如果我来到这里。所以在这里为 A 创建了一个令牌。然后在这里为 B 创建了一个令牌。并且将令牌再次发给了同一个用户。兄弟,请保存它。以后你做的任何请求都需要在这里发送。那么现在会发生什么?听着,现在会发生的是,如果用户 A 在注册后向我们的服务器发出任何请求,那么任何请求都可能是一个创建帖子的请求,一个获取帖子的请求,也就是说,获取所有已创建帖子的请求,显示动态的请求也可能在这里。所以每次请求都会附带服务器之前创建的令牌的副本。我们将在这里发送。B
如果有人发出请求,B也会将自己的一个令牌副本发送给服务器。如果C在这里向服务器发出请求,C也会将自己的一个令牌副本连同请求一起发送。服务器会做什么?服务器会读取这些进来的请求以及随请求而来的令牌。例如,这个请求来自用户A。服务器如何知道这一点?服务器会读取请求附带的令牌。当服务器读取这个令牌时,里面会有谁的详细信息?用户A的。为什么?因为创建令牌时,就是用用户的详细信息来创建的。所以,这个进来的请求会附带一个令牌。当我们读取令牌的数据时,它将是用户A的数据。通过这些数据,服务器就会知道这个请求来自用户A。这个请求附带的令牌里有用户B的数据。那么,这个特定的请求来自谁?来自用户B。我们收到的这个请求里,令牌是谁的?是用户C的令牌。那么,这个请求将来自谁?这个请求来自用户C,服务器会这样假设。故事就这么简单。这就是我们所说的身份验证,我们通过它来确定一个请求究竟来自哪个特定的用户。服务器认为,请求附带的令牌,以及令牌中包含的用户详细信息,都表明该请求来自该用户。服务器就是这样认为的。所以,这就是我们整个身份验证的工作方式。现在,我们需要了解如何使用Express来实现这一点。那么,我们来理解一下。好了,我们终于来到了VS Code。来到VS Code后,我们将在这里初始化一个文件夹。Node.js应用程序。所以,输入`npm init -y`。输入`-y`后,当我按下回车键,我就会得到一个`package.json`文件。我需要安装一些包。包的名字将是Express和Mongoose。所以,我们将在这里安装两个包。安装完成后,我还需要一些其他的包。例如,有一个叫做`dotenv`的包。所以我需要`dotenv`包。现在,如果我继续前进,我们将在这里创建一个文件。文件的名字是什么?在`src`文件夹里创建一个文件`app.js`。所以,我们将创建`app.js`文件。在这里,我们首先会require Mongoose,`mongoose = require('mongoose')`。require Mongoose之后,const,嗯,我们不会先require Mongoose。我们首先require Express,`express = require('express')`。调用Express,创建一个服务器实例,然后我们可以从这里`module.exports = app`。我们在这里再创建一个文件。文件的名字是什么?`server.js`。所以,`server.js`。`const app = require('./src/app')`。如果我在这里require `src`文件夹里的`app`文件,那么我可以调用`app.listen(port, callback)`。端口号是3000。在回调函数里,我们可以说`Server is running on port 3000`。很好。所以,到目前为止,服务器已经创建了。服务器已经启动了。现在,我们的下一个任务将是连接到数据库。连接数据库的逻辑将进入`db`文件夹里的`db.js`文件。很好,所以这个逻辑将进入`db.js`文件。所以,我们在这里会require Mongoose。我们将require Mongoose。require Mongoose之后,这次我们将创建的函数会更完善一些。里面会有一些错误处理。所以,我们将在这里把函数的名字命名为`connectDB`。在`connectDB`函数里,我们将说`try...catch`。因为有时候,你的服务器可能无法连接到数据库。那时会发生一个错误。为了处理这个错误,我们在这里进行控制台输出。而你的其余代码将如何进行?那么,在`try`块里,我们将说,嗯,我们可以说`await mongoose.connect()`。在`connect`里,我们将说`process.env.MONGO_URI`。我们将在这里说这么多。当我们的数据库连接成功后,我们将控制台输出`Database connected successfully`。很好。所以,我们已经创建了这个函数。创建函数后,我们将`module.exports = connectDB`导出这个函数。导出后,我们将在`server.js`文件中require这个函数。所以,我们require了`connectDB`函数。require之后,我们将在这里写一行`require('dotenv').config()`。在`config()`之后,我们可以调用`connectDB()`函数。所以,好的,很好。我们在这里调用了`connectDB`函数。哦,如果你不记得`require('dotenv').config()`,我再告诉你,为了访问我们创建的`process.env.MONGO_URI`这个特定的URI,或者说这个变量。这个变量在哪里?这个变量在`.env`文件中,叫做`MONGO_URI`。这个变量将在这里被放置。而这个变量的值你可以在MongoDB Compass中找到。所以,你的MongoDB Compass,我们连接集群的地方。来到这个集群。来到集群后,复制连接字符串。复制连接字符串后,现在我不能向你展示这个URI,因为我已经更改了它。所以,我不会向你展示URI。只是数据库的名字,数据库的名字,比如说,我可以在这里放。嗯,比如说,在数据库名字上有点犹豫。比如说,我们将数据库的名字放在这里,叫做Pluto。我们行星的名字。行星现在可能不是了,但。所以,Pluto,我们在这里将数据库的名字命名为Pluto。然后我将再次隐藏它。所以,我们有一个`.env`文件中的`MONGO_URI`变量。它连接到这个Pluto数据库。是的,它连接到那个。这个数据库叫做Pluto,我们现在连接到它。现在,如果我在这里,然后最终运行命令`npx nodemon server.js`。那么,我的文件将被运行。服务器将启动,数据库将连接。现在,很好。所以,现在要做什么?现在我需要在这里做的是,我需要注册一个用户。就像我们之前的流程一样,首先用户会来,他会注册。注册时,用户会提供用户名、电子邮件和密码等信息。服务器会创建一个令牌作为回应。创建令牌需要额外的包。创建令牌后,令牌会被发送到哪里?发送给我们的用户。用户会将这个令牌保存在自己那里。然后,对于之后的所有请求,他都会在每个请求中发送这个令牌。哦,所以,如果用户发出两个请求,那么这两个请求都会附带令牌吗?是的,这两个请求都会附带令牌。如果用户发出10个请求,那么这10个请求都会附带令牌吗?是的,每个请求都会附带令牌。如果用户发出100个请求,那么这100个请求中的每一个都会附带令牌吗?是的,每一个请求都会附带令牌。如果用户发出10万个请求,那么令牌会从用户那里发送到服务器吗?那么,10万个请求都会附带令牌。如果用户发出1000万个请求,那么也会附带令牌从用户那里发送到服务器吗?所以,如果用户有令牌,那么令牌就必须发送给我们的服务器。你可以称之为一条规则。首先,用户会注册。服务器会创建一个令牌。然后将令牌交给用户。之后,用户将发出的所有请求,每个请求都会附带令牌发送到我们的服务器。你可以将其视为一条规则。是的,这是一条规则。这是一个身份验证系统,必须遵守。所以,这就是我们在这里要实现的。首先,我们需要在这里注册一个用户到我们的应用程序。要注册,我们需要保存他的数据。要保存数据,我们需要在数据库中创建一个模型。那么,我们将在哪里创建模型?在`models`文件夹里。然后在`models`文件夹里,我们创建一个叫做`user.model.js`的文件。我们将在这里require Mongoose,`mongoose = require('mongoose')`。require了Mongoose。然后创建一个Schema。`const userSchema = new mongoose.Schema()`。在`new mongoose.Schema()`里,我们现在只简单地说一些东西。我们会有`username`,它的类型将是`String`。然后,现在我们的Schema,我们需要更深入地理解它。我们需要理解Schema验证将来会是什么。所以,`username`、`email`和`password`。目前,目前我们只会在数据库中存储这三样东西。最后,我们在这里创建`const userModel = mongoose.model()`。在`model()`里,我将在这里给出集合的名字`User`。我们将使用`userSchema`。所以,我们创建了`userModel`。然后,如果我说`module.exports`,那么我们在这里导出了`userModel`。导出`userModel`后,我们现在将在这里做什么?我们需要开发一些API。哪些API可以用来注册用户?注册后,我们将用户数据保存在数据库中。保存在数据库中后,我们将创建一个令牌。然后将令牌交给用户。那么,这个令牌到底是什么?我们还需要讨论。但现在,再看一些。随着视频的进展,生产文件夹结构会越来越大。所以,现在听我说一件事。我们不在`app.js`文件中创建API。是的,就是这样。为什么之前创建?因为我不能一次性教你所有东西。事情会随着时间而改变。新的东西会随着时间而出现。那些更好的东西,会随着时间而出现。所以,我现在说,我们不在`app.js`文件中创建API。我们在哪里创建?我们在这里创建一个文件。在文件之前,创建一个文件夹。文件夹的名字是什么?`routes`。现在,因为我们要创建一个注册API。注册API是一种身份验证API。也就是说,它属于身份验证类别。所以,我们在这里创建一个文件,`auth.routes.js`。在这个特定的文件里,我们将创建我们的API。那么,我们如何在这里创建API呢?在`app.js`中,我们可以直接写`app.post()`。用它的帮助,我们可以创建一个API。但是,在`auth.routes`中,我们没有`app`。那么,我们是否可以require在这里导出的`app`?不,不是这样的。你在这里会再次require Express,`express = require('express')`。require了Express后,你在这里会创建一个什么?Router。`router = express.Router()`。require了,呃,创建了。创建后,你在这里`module.exports = router`。然后,你将使用这个Router来创建API。例如,我需要在这里创建一个API。`router.post()`。在这个特定的POST API里,我们将在这里写`/register`。在`/register`之后,事情会变得更复杂。什么API将是什么?我们将在别处说明。也就是说,我们究竟如何注册。这将在别处说明。例如,如果我在这里简单地写`request`和`response`。在回调函数里,我将收到一些数据。我将收到什么数据?我将收到`request.body.username`。`username`、`email`和`password`。它们将通过`request.body`进来。但现在不会进来。为什么?因为在`app.js`中,我们没有使用中间件。`app.use(express.json())`。否则,它不会进来。很好。那么,数据就会进来。然后,我将在这里写逻辑,说,用这个用户创建一个账户。将他的数据保存在我们的数据库中。然后创建一个令牌。现在,令牌如何创建,我们也需要理解。然后将令牌返回给用户。所以,这个逻辑将进入这个控制器,这个回调函数里。但是,你的routes文件,你的routes文件,你不会在里面写逻辑。也就是说,在这个特定的API上,究竟是什么逻辑?写逻辑有专门的文件。有专门的文件夹。文件夹的名字是什么?`controllers`。文件夹的名字是`controllers`。然后在`controllers`文件夹里,我们将说`auth.controller.js`。在这个控制器文件里,我们首先会require用户模型。创建一个函数。异步函数。我们可以说函数的名字是`register`。创建一个叫做`registerUser`的函数。在这个函数里,会有`request`和`response`。然后,我们再次会说什么?`username`、`email`和`password`。我们将解构它们。然后,现在逻辑将是,你将如何注册用户。然后,当我们最终以对象的形式`module.exports = { register }`导出`register`时。我告诉你,这仍然不清楚。再看一遍。现在,我们的`controller.js`文件,我们将从中导出什么?我们将导出一个空对象。好的,所以我们在这里导出了一个空对象。然后,现在,我们的routes文件。在routes文件里,我将在这里require `authController = require()`。我在这里说什么?require。我将说,在`controllers`文件夹里的`authController`。你正在require它。很好。你从`authController`导出什么?只是一个空对象。所以,在这里require的是一个空对象。是的,很好。所以,你在这里require的是一个空对象。但是,那不行。我们需要使用这个`registerUser`函数。所以,在这个空对象里,我导出了`registerUser`这个函数。然后,导出后,现在会发生什么?现在,这个空对象不再是空对象了。这个对象里有一个属性。属性的名字是什么?`registerUser`。这个属性的值是什么?我们的一个函数。函数有两个参数,`request`和`response`。这两个参数在这里被使用。所以,你在这里导出的不是一个空对象。你导出的是一个对象,里面有一个属性,叫做`registerUser`。这个属性的值是一个函数,叫做`registerUser`。你在这里导出的是这个。所以,这次,你require的对象里有一个对象。但是,对象里有一个属性。属性的名字是`registerUser`。你将在这里使用它。所以,你将在这里使用`authController.registerUser`。很好。所以,你已经使用了`registerUser`。现在,最终会发生什么?你创建的这个API,它仍然不会运行。为什么?因为你创建的这个API是在`auth.routes.js`文件中创建的。但是,你的服务器在哪里创建的?你的服务器在`app.js`文件中创建的。所以,你的服务器现在根本不知道你在这里创建了什么新API。那么,你如何告诉你的服务器实例,是的,这里也创建了新API呢?所以,为此,`const authRoutes = require('./routes/auth.routes')`。然后,简单地说`app.use()`。一个前缀。前缀是什么?我马上告诉你这个前缀是什么。所以,`/api/auth`。前缀是什么?我马上告诉你。所以,`/api/auth`。然后,我们在这里可以直接使用我们的`authRoutes`。那么,这个前缀是什么?听着。你在`auth.routes.js`文件中创建了一个API。API的名字是什么?`/register`。你在这里创建了API。很好。很好。用POST方法创建了一个特定的API。API的名字是什么?`/register`。你创建了一个API。现在,听着。你用Router创建的这些API。为了访问这些API,你需要加上这个前缀。也就是说,你用Router创建的`/register`API。如果我想访问这个API,我必须先加上`/api/auth`。这是一个前缀。然后,在这个前缀之后,我必须使用实际的API。也就是说,如果你想访问`register`API,那么我必须先写`/api/auth`。然后,我在这里可以使用我的实际API的名字,即`/register`。现在我可以访问它了。所以,这是这里将要发生的一件事。很好。所以,这又进一步提升了我们的生产文件夹结构。是的,我们就是这样工作的。你不会在一个文件中写逻辑。你不会在一个文件中创建所有routes。例如,与身份验证相关的routes,你的注册、登录、登出、重置密码、忘记密码。所有这些routes,你都会在`auth`文件里创建。与帖子相关的routes,你将在那里创建帖子,获取帖子,搜索帖子。所有这些,你将创建一个新的`post.routes`文件,并在那个文件里创建这些API。所以,我们
我们继续前进。我们将进入注册特定控制器。在注册控制器内部,我们将做什么?我们将创建一个用户。所以 `const user = await User.create()`。我们将直接创建一个用户。在这个用户内部,我们将拥有的详细信息是我们的用户名。然后我们将在这里讨论电子邮件,然后我们将在这里讨论密码框架。这现在是一个非常基础的版本。这现在还非常非常基础,非常非常基础,目前只需理解这一点,我们稍后还需要将其提升到更高的水平。所以用户被创建了。现在听着,我在 MongoDB 中,我之前已经告诉过你,每当创建某样东西时,它都会获得一个 `_id`。那个 ID 是什么样的?它是唯一的。如果创建了两个用户,那么两个用户的 ID 都会不同。创建了 10 个用户。10 个用户的 ID 都会不同。创建了 10 万用户。10 万用户的 ID 都会不同。创建了数百万用户。数百万用户的 ID 都会不同。所以在这里,当你创建一个用户时,这个用户的 ID 也会不同。现在听着,我们创建了用户,将其保存在数据库中。我们的用户被创建了。账户被创建了。现在当服务器注册用户时,它会首先将用户的详细信息保存在数据库中,保存在数据库中后,它需要创建一个令牌。那么它如何创建令牌呢?要创建令牌,需要使用一个包。包的名字是什么?JSON Web Token。所以有一个名为 `npm install jsonwebtoken` 的包。你需要安装这个包。你安装了这个包。安装后,你可以将这个包命名为 JWT 来导入。所以你将导入 `jsonwebtoken` 并将其命名为 JWT。现在你最终将在这里创建一个令牌。创建令牌非常简单。只需来到这里,创建一个变量 `token`,`JWT.sign()`,并在 `sign()` 内部。现在看,这个 `JWT.sign()` 方法到底做什么?它就是那个方法,它将真正为你创建令牌。但是这个 `JWT.sign()` 方法会做什么?它会创建令牌并给你。那么令牌是什么?我们稍后会讨论。它会创建 JWT 令牌并给你。但是创建令牌需要两样东西,就像你看,在服务器上,就像我们在服务器上创建令牌时,令牌内部的数据是哪个用户的?是正在注册的那个用户。所以第一件事就是要求创建令牌的那个用户的数据。那么你以什么格式提供数据?你将以对象格式提供。现在,在你提供的对象内部,只有两个条件:你提供的任何数据都必须是唯一的。同时,你正在为其创建令牌的那个用户的数据。所以现在,当我们谈论 MongoDB 时,MongoDB 中有一个名为 `_id` 的属性。那个 ID 始终是唯一的。它对每个用户都是唯一的。而且因为那个 ID 是为用户生成的,所以它是用户的 ID。所以我们在这里使用的数据是什么?是我们的 ID。我们正在使用已创建用户的 `_id`。所以这是第一件事。看,`JWT.sign()` 要求两样东西:第一是用户数据,并且该数据必须是唯一的。所以 `_id` 非常适合。那么第二样是什么?第二样是 JWT 密钥。那么这个 JWT 密钥从哪里来?所以听着,JWT 密钥是什么。我们将讨论它是什么。首先来到浏览器。所以现在你需要来到浏览器。来到浏览器后,你将搜索 `jwt.io`。搜索 `jwt.io` 后,我们会看到一个网站。在这个网站上向下滚动一点,你会看到一个生成按钮。点击这个按钮。一个新的密钥。你会在这里找到一些随机生成的值。点击生成。生成。复制。复制后,我们将在这里创建一个名为 `JWT_SECRET` 的变量,在我们的 `.env` 文件中。所以 `JWT_SECRET =` 这是我们的密钥。你从这个网站复制的任何密钥都将在这里粘贴。并且在创建令牌时,我们将使用相同的密钥。现在听着,我们将在这里创建的任何令牌,我们将做什么?我们将将其发送到响应中。所以响应状态将是 201。响应状态为 201 后,我们的消息将是“用户注册成功”。已创建用户的详细信息以及已创建的令牌的详细信息也将在这里共享。所以现在,做到这一点后,我们来到 Postman。所以来到 Postman,我们重新启动服务器。所以我们的服务器是 `npx nodemon server.js`。我们启动了它。启动后,我们来到 Postman。在 Postman 上,我们将命中我们的注册 API。所以方法将是 POST,`localhost:3000/api/auth`。还记得吗?这是我们的 API 前缀。这是我们使用路由器创建的 API 的前缀。所以 `/api/auth/register` 将是我们的 API。兄弟们,我知道你们现在可能会有点迷失。你们的心可能会有点飘忽。把心收回来。现在屏幕上有点复杂。身份验证。我在视频开头就告诉过你们,这会有点难。可能会有点复杂。但这是可以做到的。所以如果你们的心稍微飘忽了,错过了任何东西,就回到 5 分钟前。看视频。回到这里,理解身份验证。你们可以把这个概念理解为没有身份验证,后端就无法完成。身份验证是整个后端的骨干。身份验证非常重要。无论你创建什么项目,都需要身份验证。所以没有身份验证,任何项目都无法完成。所以,去理解身份验证。在这里理解身份验证。回到 5 分钟前。再看一遍。我知道你们会觉得这个话题很复杂。我在训练营里教东西的时候,训练营里也有很多学生不理解这些东西。但最终我也会让他们理解。他们也会理解。我也会让他们复习:是的,这样做,那样做。他们会练习。导师在那里。所以他们会完成。但是你们现在没有导师。我不能直接和你们说话。我只能说视频里说的话。我不能说更多。所以听着。如果你们在视频里迷失了,就回到 5 分钟前。理解整个概念,然后从这里重新开始。现在听着,我们将命中 API。添加 API 后,在 Body 格式中,在 Raw 格式中,我们将发送数据。我们将发送用户名。目前我们将使用 `test_username`。发送 `test_username` 后,我们将发送电子邮件。电子邮件将是 `test@test.com`。然后我们将发送密码。所以我们的密码是什么?我们的密码将是 `password123`。所以 `request.body` 中的用户名、电子邮件和密码。这是哪个 API?POST 方法,`/api/auth/register`。哪个 API?如果我进入 `app.js`,`/api/auth`。所以我们找到了。然后我进入 `authRoutes`。所以这是我的 `/register` API。请求将到达这里。如果请求到达这个特定 API,我们将将其转发到一个控制器。控制器叫什么?`registerUser`。在 `registerUser` 中,我们将使用 `request.body` 中的数据用户名、电子邮件和密码来创建一个用户。创建用户后,将创建一个令牌。我们将把令牌和用户详细信息发送回响应。所以现在,我发送了它。发送后,用户被创建了。状态码是 201。201 表示一个新的资源,一个新的用户在这里被表示。已创建用户的详细信息在这里。一个用户被创建了。之后是令牌。那么这个令牌是什么?令牌是一个字符串。我不会说它是随机字符串。它是一个精心计算的字符串。这个 `jsonwebtoken` 方法做什么?它执行很多计算。也就是说,它涉及到加密,网络安全方面,一点点密码学。所以它在用户这个特定数据上执行很多算法,并与 JWT 密钥一起,我们得到这个字符串。我们称之为令牌。那么之后会发生什么?为什么用户现在将要进行的任何请求,我们将共享这个特定令牌。那么我们只在响应中发送令牌吗?不是这样的。我们有一个叫做 Cookies 的东西。我们将在这里使用 Cookies。那么 Cookies 是什么?如何在 Cookies 中保存数据?创建注册 API 的一个好方法是什么?我们需要在这里理解。然后我们将继续创建一个另一个应用程序,另一个项目。好了。那么现在我们将学习 Cookies 是什么?以及如何实现 Cookies。好了。那么现在我们将学习什么?Cookies 存储是什么?Cookies 存储是什么?浏览器中有许多类型的存储。其中一种存储是我们的 Cookies 存储。那么浏览器中有哪些存储?如果我给你们看。所以如果我在这里,我的浏览器,一个基于 Chrome 的浏览器。所以如果我打开它。然后检查它。检查后,如果你来到 Applications。来到 Applications,你会找到一个完整的存储部分。现在在这里,你将看到的存储,看有哪些。首先你会找到 Local Storage、Session Storage、Extension Storage、IndexedDB、Cookies、Cache Storage 和 Storage Bucket。你将在这里找到这么多类型的存储。好的?现在如果我搜索并给你看浏览器中的存储类型。输入。输入后,我将在这里得到一个 GPT 或 Gemini 的响应。所以 Web 浏览器中的存储类型。所以看,首先有哪些?我们有 Cookies,由 Web 服务器发送并存储在用户计算机上的小型文本文件。主要用于跟踪会话管理,例如登录状态和个性化。自动随每次请求发送。我将解释这里写了什么。但如果谈论 Cookies 存储。所以 Session Storage、IndexedDB、Web Storage。我们有 Local Storage,存储没有过期日期的数据。如果你想永久存储数据,可以保存在 Local Storage 中。Session Storage,存储单个会话的数据。也就是说,你访问网站一次,数据只存储在该特定会话中。IndexedDB,一个强大的低级 API,用于客户端存储大量结构化数据。好的?Cache Storage,我们在这里用于缓存。缓存是什么?那是另一个话题。Web SQL 已被弃用,现在不使用了。所以现在,如果你看,浏览器中有许多不同类型的存储。但现在我们只需要学习的是什么?只是我们的 Cookies 存储。所以 Cookies 存储是另一种存储。所有存储都有自己的属性。都有自己的优点。都有自己的缺点。但我们不需要了解所有这些。现在我们在这里要学习的是什么?是我们的 Cookies。Cookies 是什么?看,Cookies 是一种存储。听着,Cookies 存储是浏览器的一种存储类型,其中你的服务器可以直接访问 Cookies。也就是说,如果你在 Cookies 中存储了任何东西,浏览器,不是浏览器,你的服务器可以读取 Cookies 存储中的所有数据。同时,服务器也可以修改这些数据。也就是说,服务器可以在 Cookies 存储中添加新数据。它也可以读取已写入的旧数据。如果用一句话来说,Cookies 存储的管理员访问权限在你的服务器手中。现在听着,Cookies 存储是什么?Cookies 存储的管理员访问权限在你的服务器手中。也就是说,服务器可以在 Cookies 中添加任何新数据。并且也可以读取旧数据。并且它还有另一个属性,那就是如果你在 Cookies 中存储任何东西。如果你在 Cookies 中存储任何东西,然后你要从浏览器向你的服务器发送任何请求,那么存储在 Cookies 中的任何数据都会发送到你的服务器。这是这里发生的一件事。也就是说,你保存在 Cookies 中的任何数据,你保存在 Cookies 中的任何数据,都会发送到服务器。并且每次请求都会发送。存储在 Cookies 中的数据,每次请求都会发送到服务器。那么现在,我们将使用浏览器吗?不。现在我们将使用 Postman。但是 Postman 也因为 Postman 充当客户端,充当浏览器。所以这里有一个 Cookies 部分。并且这个 Cookies 部分,它 kind of 像 Cookies 存储一样工作。也就是说,服务器在 Cookies 中存储的任何数据,你都可以看到。所以我们将在这里使用 Cookies。在 Postman 中也能找到相同的存储。所以看,现在要做什么?我们现在在这里注册一个用户。注册后,创建一个令牌。并将令牌发送到响应中。但是我们不将令牌发送到响应中。我们将令牌保存在哪里?保存在 Cookies 中。那么我们可以保存在 Cookies 中吗?当然可以。但是如果在 Express 服务器中使用 Cookies,我们需要另一个中间件。那个中间件的名字是什么?Cookie Parser。所以我们将在这里使用另一个中间件。`npm install cookie-parser`。首先清理一下。所以清理。现在我们将安装一个包。Cookie Parser。我们在这里安装了 Cookie Parser。并将其作为中间件在 `app.js` 文件中使用。所以 `const cookieParser = require('cookie-parser')`。我们在这里导入了 Cookie Parser。并将其作为中间件使用。所以,除非你在这里添加中间件,否则你的服务器将无法访问 Cookie Parser,或者说无法在 Cookies 中存储任何东西。现在看,要做什么?在我们创建令牌的地方,我们将令牌发送到响应中。但不是这样的。我们做什么?我们使用 Cookies 来设置我们的令牌。看,我们将其保存为 `response.cookie()`。好的,那么现在发生了什么?也就是说,我在这里 `response.cookie()` 的意思是,我将在 Cookie 中存储一些东西。以什么名字存储?以 `token` 的名字。那么它的名字一定是 `token` 吗?不。如果你愿意,你可以随便命名。所以你现在要做的是,你将在 Cookie 中存储这个,这是哪个 Cookie?这是浏览器中的 Cookie,也就是说,我们现在客户端的 Cookie。在 Cookie 存储中,以 `token` 的名字存储令牌。我们在这里这样做。我们重新启动服务器。`npx nodemon server.js`。输入。输入后,服务器启动了。如果我来到 Postman。看,如果我现在给你看 Cookies,这里没有任何 Cookie。我们的 Cookie 存储是空的。现在听着,一旦我来到注册。所以来到注册后,一个用户将被注册。注册后,我们将创建一个令牌。并将令牌设置为 Cookie。然后我们将收到响应消息“用户注册成功”和用户数据。所以看,我发送了它。发送后,我收到了响应数据。现在如果我在这里看,在 Cookies 中,你看到这里有一个以 `token` 命名的东西被创建了。并且 Cookies 不再是空的。所以以 `token` 的名字创建了东西。如果我在这里点击 `token`,你会看到我的令牌在这里。很好。那么这里发生了什么?听着。你注册了用户吗?是的,当然注册了。然后你创建了令牌。是的,当然创建了。然后你将令牌保存在哪里?保存在 Cookie 中。所以无论谁在这里发送请求,他都有一个 Cookie。在这个 Cookie 中,我们以 `token` 的名字保存了我们的令牌。那么名字只是 `token` 吗?不,我告诉过你,你可以随便命名。所以现在我们将以 `token` 的名字保存。看,我可以很容易地删除这个 Cookie。删除了。再次发送请求。创建了一个新用户。并且因为响应再次发送了,所以 `response.cookie()` 创建了一个新的 Cookie。并且那个 Cookie 的名字是什么?`token`。所以以 `token` 的名字,我的 Cookie 中将有一个变量。并且里面的值将是我的令牌的值。现在听着。那么你将令牌保存在哪里?保存在 Cookies 中。为什么?因为 Cookies 存储的一个很好的优点是,服务器可以访问 Cookies 中的任何数据。同时,每次请求发送到服务器时,Cookies 中的任何数据都会发送到服务器。也就是说,
好的,这是您提供的文本的中文翻译:
你看,现在如果我在这里创建一个 API。我们在这里快速创建一个虚拟 API。Router.get 和 Router.get 中有一个 /test API,我在这里打印日志,打印 Cookies,表示我在这里打印我的 Cookies。要打印 Cookies,我需要访问 request.cookies。然后我们将发送一个消息响应,内容是“test out”,并且在 Cookies 中访问 request.cookies。所以这是我们的测试 API。但是它的前缀是什么?/api/auth/test。所以这就是那个 API 的完整名称。然后我们来到 Postman。来到 Postman 后,使用 GET 方法,输入 localhost:3000/api/auth/test。现在你看,如果你对这个 API 发送请求,数据就保存在 Cookies 中。你的数据保存在 Cookies 中。那么会发生什么呢?因为 Cookies 中有数据,所以这些数据会随着每次请求发送到服务器。是的,绝对会。那么如果数据发送到服务器,我们如何访问它呢?可以通过 request.cookies 来访问。所以现在我在这里要打印的就是这个。所以你看,如果我现在发送它,发送之后,这里打印的是什么呢?打印的是 Cookies。打印 Cookies 之后,我们之前打印的 request.cookies。它以对象的形式,在 token 中,我得到了 cookie。不是 cookie,是我们得到了 token。所以现在,通过这个 token,我告诉你什么?用户首先进来。首先他会注册。这里发生的是用户首先注册。注册后,服务器会创建 token。创建 token 后,token 会给谁?给用户。那么用户具体会给哪个存储呢?它会给 Cookies 存储。我们的服务器,服务器将 token 保存在客户端的 Cookies 中。然后客户端向我们的服务器发送任何请求时,该 token 每次都会在 Cookies 中发送给我们。然后服务器会查看 token,这个 token 是你创建的, किससे?通过用户的数据。所以我们可以读取用户的数据,并且我们可以说这个请求是来自哪个特定用户的。所以我们以这种方式实现 Cookies。现在我们需要了解更多东西,那就是我们可以如何更有效地实现注册 API,以及我们如何在这里读取和验证 token,或者认证这个请求是来自哪个用户的。所以现在我们需要朝着这个方向前进。更有效地创建注册 API。并且同时借助认证中间件。是的,中间件也会出现。我们来理解一下如何实现它。好了,Cookies 存储是什么,我们已经看到了,我还需要和你聊聊。关于什么?就是你是否理解这些东西,或者不理解?如果你理解了,那太好了。如果你不理解,那就再看一遍这个视频。看 5 分钟前的,看 10 分钟前的。 wherever you don't understand, watch this entire video. And just stay with me. This is my guarantee that if you are watching this video, you are understanding this video, then backend will come to you. This is my guarantee. I have taught backend so well in this video that you will get backend. Don't think that I will waste time by repeating the video. No, that won't happen. If you are watching this video, how can time be wasted? This is your time to study. So you are utilizing it for studying. Where will your time be wasted? You know? When you use Instagram, scroll through reels, that's where your time will be wasted. If you play any game, let's say you are playing PUBG, you are playing Valorant, any other game, any game, Tekken, any game, that's where your time is being wasted. If you don't want to build your career there. Of course, you are talking to your girlfriend. Here your time is being wasted. Talking to your girlfriend for two-two hours, three-three hours. Your career is not being built there. You are getting a girlfriend, that's a different matter. But your career is not being built there. So you are wasting time in all these places. You need to invest your time in this particular part. If you don't understand something, you need to understand it by repeating it, and you need to understand things. And just stay with me in this video. You will understand everything. This is my guarantee. You will understand the entire backend, how backend works. How we build applications. What exactly are servers, you must have understood that. Now how we program servers more effectively in authentication, that's what we are understanding here. So now, how do we effectively create a registration API, that's what we need to understand here. So look, I am sharing the screen here. After sharing the screen, register user, this was our controller. In this controller, what was happening was that username, email, and password were coming to me, and with this, I would create a user. I would create its token and save it in cookies. I was doing that too. But in our registration API, we need to assign some other things. Like what? Look, what happens is that first, if you want to see all the users I have created so far, then look, three users have been created, and the email address of all three users is test@test.com, test@test.com, test@test.com. The same email address for all three users. The same username too. All these things are coming. But tell me, can you create another account on any account, let's say Instagram, if your email address is the same, or any number is the same, or your username is the same, then you cannot create another account on Instagram with the same username and same email. And this is happening in almost all applications: you cannot create another account with the same email and same username. But our website, our server has this problem. What is the problem? That a user can create another account using the same email. Look, here are three users. Three user accounts, and the email address of all three users is test@test.com. This one is also the same. test@test.com, same email address. test@test.com, same email address. So there are many users here, and the email address of all users is the same. But this is not the case in a working application. You cannot create another account with the same email in the same application. There, what will happen is that one email should create only one account, and the email addresses of all other users should be unique. What does unique mean? That one user exists per email. The email address of another user is different. This is what should happen. So how do we implement this? So first, we implement it at the database level. That if I want the email to be unique, how do I specify this? Look, the type will be, I will directly specify here that the type here will be string, and along with that, it will be unique. So what does unique mean? What does unique: true mean here? It means that the email property within the user that I will create in the database should be unique: true. This means that all users whose emails I will create in the database will have unique email addresses. Two users cannot have the same email address. It is impossible for two users to have the same email address. Okay, what if I try? That I will create two users with the same email. The database will not allow it. Try it yourself. Try it now. If you try to create two different users with the same email address, it will start giving an error. I will tell you how. For now, we are deleting these users that we have created so far. And they have been deleted. And we have implemented a rule here that all user email addresses should be unique. So we have implemented it here. Now let's try once. Let's try once. We will come to controllers. After coming to controllers, we will proceed with the same logic that was written before. So here what is happening? Username is coming, email is coming, password is coming. All these things will create a token. After creating the user, the token will be saved in cookies, and then we will create the user. So right now, there is not a single user in our database. There is not a single user in our database right now. Let's come to Postman. After coming to Postman, I created one user, which has the body. So this is the one. Okay? So now we come here. In the body, I have test username, test@.com email, and password. I sent it. After sending, one user was created, and this user must have also come into the database. Now look, one user has been created, whose email address is test@tests.com, and when I created my model or schema, what did I say? That now the email will be unique. What does that mean? Another user cannot be created with the same email. It won't happen. So now, if I do the same here, I am trying to register another user whose email address is the same. So now, if I send this, after sending, now look what error I am getting here? 500 Internal Server Error. And in the internal server error, what am I getting? I am telling you. Look, I am getting an error here. I am getting an error here. And what is the error? Mongo server error, that Mongo DB is giving an error here, that E 1100 11000 thing 11000 duplicate key error, that a duplicate key error is occurring. Where? Inside the collection. Inside which collection? In the Pluto database, its users collection, I am getting an error. How is the error occurring? That the email, which is ours, has been used as a duplicate key? test@test.com. Look what happened? When I requested for the first time, "please register the user," the user was registered. Why? Because no user existed with the same email. But when I tried the second time, what happened was that with the same email, we again tried to create a user. And what happened was that the email address went into the controller. The email address went into the controller, and I tried here, user model.create(username, email, password). This time, the email that came must have already been registered with another user. Then what happened? When we are trying here in our database to create another user with the same email. But what did we say inside our model? What did we say inside the schema? That the email will be unique. So this thing that we said, that the email should be unique. And what we are doing now is trying to create another user with the same email. This is conflicting. So when there is a conflict here, it generates an error. Your MongoDB gives you an error that a duplicate key error is occurring here. You told us that the email should be unique. But you are trying to create another email, another user with the same email. So we cannot do that. So this is the error you will see here. Now look, what do we do? Now we don't get an error. Look, this type of error that is coming, we never give it to our frontend user. All errors that come on the backend, we cannot deliver them to the frontend as they are. This is risky. There are many security concerns. So we never do this. So what do we do here? Listen. We will check here. That const isUserAlreadyExists = await UserModel.findOne(). And in findOne, we will say, "Find based on email." After finding based on email, now look, the email that has come to us, if a user already exists with this particular email, then it will be returned to me. Look, what does find do? findOne does this: if it finds a user with the query you have applied, it will return that user. And if the user is not found, what does it return? It returns null. So I say, "If isUserAlreadyExists." If the user already exists, then we will return here. response.status and in status, we will say 409. Now why did I say status code 409? Open the PDF that you will find in the description and look at it. You will read there what the meaning of status code 409 is. Then you will know that the user already exists. Great. And we will return from here. Return. It is important to put return here. If you don't put return here, I will tell you what other errors can occur here. Put return here carefully. Now listen. What condition have we put here? This time, we are not creating the user directly. This time, we will not create the user directly. First, we will check the user. That is, is there any user already existing with the same email? If a user already exists, then we will return, saying status code 409 and the message will be "User already exists." So now, if I try to register again with the same email, this time I will get 409 Conflict and the message "User already exists." Okay. So if I change the email here. I made it test_s2. Then yes, this email is different, right? The email that already exists in your database is test@test.com. But now, with which email are you trying to create? test_s2@test.com. So the emails are different. So it will be created with this email. Yes, it will be created because the emails are now different. Both users have different emails, so the database will allow it and it will be created. Great. Now listen. So this was another level up towards our registration API. Now we will look a little more at what? That okay, before looking at some things, now we will have some confusion. Somewhere you will have some confusion. About what? That we are creating this registration API. The user is also registering. A token is being created. But why are we creating this token? Let's move towards that a little. Let's understand why we are creating the token. So look, why are we mainly creating the token? If I give you an example. Look, we mainly create tokens for the user. We give the token to the user. And then if the user wants to make any request, then they send the token with the request. And because we save the token in cookies, if the token is in cookies, the token always comes with every request. And the server will look at this token, understand, "Whose token is this? Which user's token is it?" And it will know that yes, this is the token of this particular user. Then listen, what will I do here? I am creating a particular API. Inside auth, the test part is probably done. Test is not needed right now. Listen, I am creating an API here. I am creating an API here. Let's say okay. So it's a dummy API. We need to create a post here. Let's say I need to create a post. So for creating a post, I will create post routes. postRoutes.js. And here I will require express. const express = require('express'); const router = express.Router(); module.exports = router; Now I am going to create a dummy route. So this post work will not be very production-ready. It's dummy. And here I will do a router.post, or let's say, we will post here. And the image will be /create. So the API name is /create. And inside request.body, whatever data is coming. So console.request.body. console.log(request.body) we can do here. Great. We have logged request.body. And after logging, I am logging one more thing here. That is, request.cookies. We can log request.cookies here. Great. And in the response, we can say response.send("Post created successfully."). Great. So it's a dummy API, not a production API. It's a dummy API. And if I want to use this API, I will have to bring it into app.js. So here I will come. const postRoutes = require('postRoutes'); After requiring, I will use it with a prefix. What is our prefix? /api/post. And we will proceed with our /create. So let's come to Postman. We will create an API. Its method will be POST. localhost:3000/api/post/create. And after create, if I come to the body. So raw format. And inside raw format, I am saying now, we will send the image here. Image is in file format. But it's a dummy API now, so I am saying.
嗯,好,一些图片,一些图片,好的。而且我们这里还会发送一个东西,就是标题。那么我们的标题,我可以称之为“测试测试下划线标题”,我可以这样称呼它。那么现在如果我发送它,发送之后,我就会收到响应:“帖子创建成功”。而且同时,任何在请求体(request.body)中发送的数据,那个数据也会到我这里。并且在 Cookies 中存在的那个数据,那个数据也会在这里正确地到我这里。
那么现在看,现在我有一个简单的问题。在 Instagram 上,如果你想创建任何帖子,任何帖子如果你想创建,那么你首先需要登录,并且只有在登录之后你才能创建帖子。这是什么意思?意思是,只要你不登录,那么 Instagram 就不会让你创建帖子。哦,好的。是的,就是这样。而且就是这样。实际上就是这样。你可以去任何应用程序。你可以去任何像 Instagram 这样的社交媒体应用程序。你首先需要在那里登录,并且只有在登录之后你才能在那里给任何人发送消息或创建一些帖子。这是那里存在的一个东西。那么我们需要构建相同的功能。怎么做?就是说,只要用户没有登录,那么我们就不会允许他创建帖子。我们需要做同样的事情。
哦,但是我们怎么知道用户是否已登录呢?也就是说,用户是否创建了账户,是否登录了,我们怎么知道呢?那么我们可以非常容易地知道,就是说,任何拥有令牌(token)的用户,我们可以说那个用户是已登录的。为什么?因为你看,令牌是什么时候创建的?令牌只在用户在我们的服务器上注册时创建。服务器会创建一个令牌,并且把那个令牌给我们的用户,然后在此之后,如果用户发出任何请求,那么我们的令牌就会随着那个请求一起发送。那么这是我们拥有的一个东西。那么我们可以说,任何拥有我们令牌的用户,那个用户将是已登录的。同样的事情。好的?
那么令牌是保存在哪里呢?保存在 Cookies 里。是的,确实保存了。很好。而且在 Cookies 里我们确实收到了令牌。确实收到了。看,在 Cookies 里我们收到了令牌。这个令牌是正确的吗?但这是一个很好的问题。这个令牌是正确的吗?现在是正确的。为什么?因为现在我们还没有在这里做任何错误的事情。那么现在你看到的令牌,在 Cookies 里的令牌,这个令牌是正确的。但是现在这个令牌是正确的吗?不。现在这个令牌完全不正确。现在完全不正确了。那么现在你在这里看到的令牌,这个令牌完全不正确。和服务器创建的那个令牌相比,这个令牌非常不同。和那个令牌相比,这个非常不同。令牌,服务器生成了一个非常大的令牌,但是和那个令牌相比,这个令牌现在非常不同。那么这次在 Cookies 里发送的数据,那么 Cookies 令牌没有在这里保存。那么这个令牌是错误的。保存了它。保存之后,现在如果我发送,那么看,现在令牌是错误的。现在这里服务器创建的那个令牌,在 Cookies 里是一个错误的令牌。那么这次到达服务器的令牌会是什么样的呢?是一个错误的令牌。但是听着,现在如果令牌是错误的。如果令牌在这里是错误的,那么我们就不能在那里允许啊。为什么?为什么?因为令牌是错误的嘛。我们怎么能在那里允许呢?
看,我们检查两件事。什么?就是说,令牌是否存在?首先我们就会检查这个。我们首先只在令牌存在且令牌正确时才创建帖子,那时我们可以在那里检查令牌。哦,是这样,是的,所以你看,我们首先在这里检查 `const token = request.cookies.token`。那么如果 `request.cookies` 中有令牌,那么我们就会创建帖子。但是如果 `if (!token)`,就是说如果 Cookies 中没有令牌,那么我们就会发送 `response.status`,我们在这里说 401。401 的意思是未经授权(Unauthorized)。并且我们的消息会以 JSON 格式发送,消息是“未经授权”。为什么?因为听着,你在这里做的工作,那个工作是什么呢?就是你需要在创建一个帖子。但是帖子只能由已登录的用户创建。并且我们怎么知道是否登录了呢?拥有令牌的人。那么拥有令牌的人,我们只会允许他。并且如果你没有令牌,那么我们就会从这里让你返回,并且在返回中,我们在这里向你发送 401 响应。401 状态码的意思是未经授权。并且在消息中也会发送什么呢?“未经授权”。现在听着。
那么如果你在这里没有令牌。现在你没有令牌了。你的令牌丢失了。那么听着,如果你现在没有令牌,那么在这里服务器会发送 401 未经授权的消息。“未经授权”会在这里发送。好的?哦,那么如果令牌存在呢?就像现在我在这里在 Cookies 中添加一个令牌。好了,我在这里在 Cookie 中添加一个令牌。所以我给它命名为 token,然后在 token 之后,我在这里输入了一些随机值。保存了它。保存之后,这就是我的令牌了。令牌之后,现在如果我发送它,那么看,现在发生了什么?现在这里发生了什么呢?就是令牌是存在的。是的,令牌是存在的。那么这里的意思是,Cookies 中应该有令牌。是的,应该有。并且这个 `if (!condition)` 条件没有执行。是的,没有执行。那么这次响应是什么呢?“帖子创建成功”。也就是说,用错误的令牌创建了帖子。没有创建。是假的。也就是说,用错误的令牌创建了帖子。但是那个令牌不是我们的服务器创建的。是的,没有创建。也就是说,发生了错误,就是说,有人使用了不是我们服务器创建的令牌,在我们的服务器上创建了帖子。但这是错误的。是的,完全错误。
那么现在我们在这里做什么呢?如果令牌出现在 Cookies 中,那么我们就会检查,就是说,令牌是否正确。我们检查我们的服务器是否生成了那个令牌。那么这怎么生成呢?这怎么检查呢?那么你还记得你创建的那个令牌吗?那个令牌是借助一个包创建的。借助哪个包?JWT,或者你可以称之为 JSON Web Token。那么借助这个包,我们也可以检查,就是说,我们的令牌是否正确。怎么做?`const`,一个简单的方法是 `jwt.verify`,并且在 `verify` 里面,你需要验证的令牌。需要验证哪个令牌呢?就是 Cookies 中收到的那个。那么我们会验证那个令牌。并且为了验证,你需要那个令牌。并且同时,你在创建令牌时在这里使用的 JWT 密钥,你在验证令牌时也会在这里使用相同的 JWT 密钥。你需要在这里检查这个。哦,好的。肯定会检查。
哦。那么现在令牌是错误的。是的。现在我们从 Postman 发送到 Cookies 里的令牌。这个令牌是错误的。是的,完全错误。是一个完全错误的令牌。是的。那么这次我们验证的令牌会是什么样的呢?会是错误的。是的,完全错误。哦,那么当错误的令牌被验证时会发生什么呢?看,发送了。发送之后,现在你在这里会收到一个错误:JWT Malformed。你的 JSON Web Token 会给你一个 JWT Malformed 错误,意思是你的令牌不正确。那是一个错误的令牌。那里就只有这种情况。那么看,它会给出这个错误,并且处理错误的方法是什么呢?就是 `try...catch`。我们在这里使用 `try...catch`。那么我们在这里使用 `try...catch`。并且在这里我们会说 `response.status`。哦,听我说一件事,听我说一件事。你在这里可能会有很多困惑。也是对的。认证不是一个简单的话题。是一个困难的话题。那么如果感到困惑,就反复做。再做一次。再看一遍视频。以 1.5 倍速观看。但是如果视频在认证方面有任何一点困惑,就再看一遍视频,并继续看。直到清楚为止,不要前进。如果即使看了很多遍之后你仍然不清楚,去 Discord 上问。在 Discord 上你也会遇到我们的线下学生,并且同时,我们的 Code One 学生也会在那里。如果在那里你仍然不明白,那就不可能了。你在 Discord 上问一次。在 Discord 上问,他们会告诉你那里有什么问题。因为我们的普通网站上,有时会有导师来,所以也许你会在那里找到答案。他们会回答你。但是要弄清楚事情。如果你完全在社交场合提问有很大问题,那么先问 GPT。在去 Discord 之前,先问一次 GPT。在那里也会解决。如果你去 Discord,就会清楚的。就这样。
那么看,现在看,如果我在这里做什么呢?在这个地方我正在做一件简单的事情,就是 `jwt.verify`,如果我在这里验证一个错误的令牌,一个不是我的服务器创建的令牌,那么 `jwt.verify` 会返回一个错误。它会抛出一个错误,并且为了处理那个错误,我在这里使用了 `try...catch`。意思是什么呢?就是如果 `jwt.verify` 成功验证了令牌,如果令牌是正确的,那么就没有问题。但是如果令牌是错误的呢?那么在这里,如果令牌是错误的,就会抛出一个错误,并且我们会在 `catch` 部分处理那个错误。那么如果出现一个错误,那么我们就会从这里返回 `response.status 401`,并且当错误的令牌在这里出现时,我们就会在这里收到错误。那么看,如果令牌是错误的,它就会抛出错误。错误会在哪里处理呢?在 `catch` 部分。我们会在 `catch` 部分处理错误,并且如果出现错误,那么就意味着令牌是错误的。那么如果令牌是错误的,那么我们在这里就会说 `response.status 401`,并且在这里我们可以说“令牌无效”(Token is invalid)。就是说,你发送的那个令牌是错误的。我们可以发送这么多。
那么现在看,如果我在这里,在 Cookies 中,发送一个无效令牌,那么看,我这次会收到什么响应?401 消息:“令牌无效”。兄弟,你使用的那个令牌是无效的。哦,是的。那么看,如果我现在在这里使用一个正确的令牌,那么为此我需要再创建一个用户。事情就是这样,就是说,如果你在注册时,你的令牌肯定会被创建。并且同时,当我们再创建一个登录 API 时。在登录 API 时,我们也需要创建一个令牌。那么现在我们将使用注册 API 注册一个新用户。在 Cookies 中,我们应该已经保存了新的令牌。并且现在如果我使用正确的令牌去创建帖子,那么我可以使用正确的令牌创建帖子。为什么?因为你看,我在这里应用的逻辑是,Cookies 中应该有令牌。确实有。我们在 Cookies 中有令牌。这次在 Cookies 中的令牌是正确的令牌。那么 `jwt.verify` 当它验证正确的令牌时,它不会返回任何错误。它不会抛出任何错误。相反,它会返回一个东西给你,我们称之为“解码数据”(decoded)。现在“解码数据”通常是一个名称。它是变量名,你可以取任何名字。哦,那么“解码数据”是什么呢?那么如果我在这里 `console.log` 解码数据,那么看,我得到了什么?发送了它。那么“解码数据”会在这里出现。我们会验证解码的 JWT 验证令牌,并且如果你验证正确的令牌,你就会在返回中得到“解码数据”,并且这个“解码数据”到底是什么呢?一个对象,对象里面有什么呢?有 ID。这个 ID 是从哪里来的?这个 IAT 是什么?IAT 这是什么?这个令牌是什么时候创建的?是它的时间戳。这个 IAT 是指令牌创建时的时间戳。并且这个 ID 是什么?听着。当你创建令牌时。令牌是在哪里创建的?在注册控制器(Register Controller)里面。那么在创建令牌时,你以对象格式提供了一些数据,ID。那么当你验证令牌时,就是这个相同的 ID,那么这个相同的 ID 就会在“解码数据”中被打印出来。那么这就是我们的“解码数据”,并且在它里面,这个令牌来自的那个用户,那个 ID,那个用户的 ID 会在我们这里。为什么?因为你创建令牌时,在创建令牌时,你就是提供了这个数据。那么当你验证令牌时,就是这个相同的数据,就是这个相同的数据会到你这里。看,你用什么数据创建令牌,当你验证令牌时,就是那个相同的数据,那个相同的数据就会在返回中到你这里,并且你可以在这里使用它。
现在我在这里收到了 ID,那么如果我在这里收到了 ID,我能做什么呢?在这里我可以在这里引入用户模型(User Model)。并且在找到用户模型之后,那么在这里我会做什么呢?`const user = await UserModel.findOne`,并且这次我将基于 `_id` 查找,在解码数据中我将收到的 ID,我们在这里使用 `await`。那么在这个地方会有一个 `async`。那么在这里,无论找到哪个用户,我都可以将其打印出来。可以 `console.log(user)`。很好。那么在这里打印出来了。现在如果我发送它,那么发送之后,看,应该会收到解码的令牌。我们验证了令牌。验证之后,解码数据中应该会有 ID。我们基于那个 ID 查找了用户,并且我收到的那个用户应该被打印出来了。那么看,我收到了哪个用户,他的电子邮件地址是什么?`test_3`。那么这就是你整个认证的生命周期。在注册时你会创建一个令牌。在令牌里面,你会有用户的 ID。那个 ID,带着那个令牌,当你下次向服务器发出请求时,那么那个令牌就会在令牌里面被读取。你的服务器会验证那个令牌。在验证时,你用来创建令牌的那个数据,你用 ID 创建的,那么那个 ID 就会到你这里。你会用那个 ID 查找用户。在数据库中你会找到用户,并且由于那个用户,你可以在这里说,就是说,这个请求是来自哪个用户,并且你在这里会得到那个用户的详细信息。那么这就是你一个完整的认证系统的生命周期。现在如何正确且更好地实现它,我们需要在这里理解。那么现在我们来理解这个。
好了,那么现在我们在这里开始一个新项目。认证完成了吗?不,认证我们还需要在这里更好地学习。我们将构建的这个项目,我们需要更好地学习认证(Authentication)和授权(Authorization)。中间件(Middlewares)是什么,我们也需要在这里学习。项目会是什么呢?那么我们的项目将是一个简单的 Spotify 克隆,其中将有两种类型的用户。哪些呢?看,一个将是普通用户,他可以听歌曲。播放列表,所有这些东西他都可以听。就像一个普通的 Spotify 用户。除此之外,还会有一个用户,我们称之为艺术家(Artist)。那么艺术家能做什么呢?他可以在 Spotify 平台上创建新歌曲。那么我们需要在这里创建一个应用程序,其中要实现基于角色的授权(Role-Based Authorization)。怎么做?因为只有艺术家才能创建音乐。能够创建新的音乐。并且我们的普通用户不能上传音乐,但他们肯定可以听音乐。那么我们需要在我们的应用程序中开发这个功能,并且我们称之为是什么呢?基于角色的认证系统(Role-Based Authentication System)。那么我们需要在这里实现这个。
那么现在我们的编码屏幕,我们回到 VS Code。这是我们的浏览器。所以这是我们的 VS Code。我们会完全清除它。清除之后,现在看,为了初始化我们的一个简单项目,我们首先使用的命令是 `npm init -y`。在 `-y` 之后,我们在这里需要一些包。哪些包呢?那么首先是 Express,当然,然后我们在这里需要 Mongoose。Mongoose 之后,我们在这里需要,比如说 `.env`,之后是 JSON Web Token,JSON Web Token,JSON Web Token,之后我们需要 Cookie Parser。Cookie Parser 之后,我想目前为止我们的工作应该可以了,不,现在还需要一些其他包,比如为了存储音乐文件,我们需要 ImageKit,那么我们也会安装它。但是在那之前,我们在这里创建一个文件夹。文件夹的名称将是 `src`。在 `src` 文件夹里面,我们创建一个 `app.js` 文件。并且在这个地方,我们首先引入 `express = require('express')`。引入了 Express,并且会创建一个服务器实例。`app = express()`,并且 `module.exports`。我们可以从这里导出 `app`。现在我们需要在这里使用一些中间件。`express.json`,我们还需要引入一个中间件,它的名称将是 Cookie Parser,并且我们也会在这里使用 Cookie Parser。很好。那么我们需要在这里使用两个中间件:`express.json` 以便数据可以进入 `request.body`,Cookie Parser 以便我们可以在 Cookies 中设置数据,并且同时可以读取从 Cookies 中获取的数据。很好。那么我们在这里继续前进。
继续前进之后,现在我们再创建一个文件。我们将文件命名为 `server.js`。`const app = require('./src/app')`,并且 `const port` 我们可以决定,但目前为止
我不会在这里决定端口,但 `app.listen` 端口号 3000,回调函数,回调函数里面可以这样说:服务器正在端口 3000 上运行。很好,而且我们这里因为会使用 `.env`,所以 `require('.env')`,这样就可以说了。
很好,我们完成了这些。我们在这里再创建一个文件。在 `db` 文件夹里面,在 `db` 文件夹里面创建一个文件 `db.js`。很好。
那么现在我们 `require` 一个 `mongoose`,并且在这里创建一个函数。这个函数里面是做什么的呢?简单来说,在这个函数里面,你写的是你的服务器将如何连接到数据库。所以 `try`,然后 `try` 之后我们可以说 `catch error`,然后 `process.exit`。目前不需要 `process.exit`。不过在生产环境中,当我们谈论它时,我们也会使用 `process.exit`。在某些特定的设置中,我们也会在那里使用这个东西。`process.exit` 是什么?稍微搜索一下看看。去 Google 搜索。一个好的开发者标志是,他可以通过 Google 搜索来理解事物。所以去 Google 搜索,你会发现 `process.exit` 到底是什么。
所以在这里我们会说 `console.log('数据库已成功连接')`。我们完成了这些。完成这些之后,`connectDB()`,然后 `connectDB()` 之后,我们可以 `module.exports = connectDB` 来导出。导出之后,我们会进入 `server.js` 文件,`require` `connectDB`,然后在这里调用 `connectDB` 函数。很好。
然后 `npx nodemon server.js`。所以如果我现在在这里写这个命令,它会说“什么?我们没有安装包吗?”。所以 `package.json` 中我们安装了包。所以包已经安装了。`.env`,我想我们再试一次。`.env`。好的,所以 `nodemon server.js`。好的,明白了。
所以这里可能有一个问题,就是我们的 `.env` 文件不存在,并且里面没有变量。所以我们可以说 `MONGO_URI`,并且在这里需要提供值。所以 `mongodb compass`,在 `mongodb compass` 中,我复制连接字符串,然后在这里粘贴。复制连接字符串,然后我需要数据库的名字。这次我给的数据库名字是什么?这次我使用的数据库名字是 `comet`。这次我使用 `comet` 作为数据库名字。很好。
所以数据库名字我在这里已经给了 `comet`,然后给 `comet` 数据库名字之后,现在如果我重新启动服务器,服务器就重启了,并且它已经连接到数据库了。很好。
现在你知道一件好事吗?就像到目前为止,我们在后端自己创建了所有东西。所以现在如果我们需要启动服务器。如果我们需要在这里启动服务器,我们使用什么命令?`npx nodemon server.js`。但是我们可以修改这个命令。怎么做?看,进入 `package.json` 文件。这个 `package.json` 文件,进入这个文件。
然后这里会有一个 `scripts` 属性。在这个 `scripts` 里面,你可以写一个属性,叫做 `dev`。然后在这个 `dev` 属性里面,你可以写 `npx nodemon server.js`。所以你可以在这里写 `server.js`。
那么这会发生什么呢?这会发生的是,每当你运行 `npm run dev` 在你的终端上时,这个 `npx nodemon server.js` 就会运行。所以看,如果我在这里写 `npm run dev`,然后回车,回车之后 `npx nodemon server.js` 就会运行,你的服务器就会在这里启动。
那么我为什么告诉你这些呢?我告诉你这些是因为,这是一种很多初学者很少知道的事情。也就是说,当你创建服务器,并且你刚开始的时候,刚开始的时候很少有人知道。最终你会知道,是的,脚本是这样创建的。一开始很少有人知道,所以你可以和你的朋友们稍微玩一下,说:“看,还有这样的命令。”。
并且以类似的方式,我们在这里写另一个命令,当我们部署服务器时,通常会使用 `start` 命令,其中只有 `node server.js`。`node server.js` 是做什么的呢?它会启动一次服务器,然后它不会再观察变化。所以它对于生产级别的服务器来说很好。它不会在任何变化时重启服务器。它会一直运行一次启动的服务器。所以 `start` 命令我们在生产环境中使用。很好。
所以我们的服务器在这里已经重启了,并且同时连接到了数据库。现在听着。首先,我们在这里要做什么?我们需要在这里创建用户注册和登录,也就是说,基于身份验证的路由。如果我们想在数据库中执行任何与用户相关的操作,我们在这里做什么?我们首先创建它的模式。然后创建模型。然后创建它们的 API 和控制器。
所以为此,在 `src` 文件夹中,我们首先创建一个 `models` 文件夹。然后在 `models` 文件夹中创建一个文件 `user.model.js`。在这个特定文件中,我们将 `require('mongoose')`。`mongoose`。`const UserSchema = new mongoose.Schema(...)`。在 `UserSchema` 中,我们会说一个非常简单的事情。看,我告诉你我们在说什么。
在这里我们会说什么?首先我们会说 `username`。假设我们这里可以叫做 `username`,它的类型会是 `String`。`username`,它将是 `required`。`required` 的意思是?`required` 的意思是,现在如果你想在我们的数据库中创建任何用户,你必须提供他的 `username`。这就是 `required` 的作用。
好的,如果用户名为 `required`,并且在创建用户时没有提供用户名,数据库会报错,说“抱歉,兄弟,如果你想创建一个用户,他的用户名是必需的。”。如果你不提供用户名,数据库就不会创建新用户。所以 `required`。
并且同时我在这里会给什么?`unique: true`。`unique: true` 的意思是?意思是,如果你数据库中的所有用户,所有用户的用户名都是唯一的。任何两个用户的用户名都不能相同。所以我们在这里给了 `unique`。
`unique` 之后,我们在这里会给其他属性,比如 `email`。`email` 也将是 `type: String`,`required: true`,并且 `unique`。很好。
然后之后,我们简单地,就是我们的密码。所以 `password`,`type: String`,`required: true`。`required: true` 可以说是。好吧?目前是这样。并且直到我们使用 Google 身份验证,我们可以在这里说。
现在我们给了 `required: true`。给了 `required: true` 之后,我们在这里会有一个属性,那就是 `role`。看,我们的应用程序,Spotify,将有两种类型的用户。第一种是普通用户,第二种是艺术家。所以普通用户可以正常听歌,而艺术家可以创建歌曲。但是普通用户不能创建歌曲。我们即将发布的音乐,普通用户不能创建。所以我们这里会有一个 `role`,它的类型是什么?所以我们这里会有 `type: String`,并且它有两个可能的值。
所以我们如何表示它?通过 `enum`。通过 `enum` 来表示。所以一种是 `user`,另一种是 `artist`。我们这里将有两个。然后之后,我们会给一个默认值。`default: 'user'`。
所以看,`enum` 做了什么?在我们的应用程序中,可以有两种类型的用户。一种是普通用户,为此我们只保留了 `user`。另一种可以是艺术家。所以 `enum` 在这里表示,这个 `role` 属性,这个属性的值必须是这两个中的一个,要么是 `user`,要么是 `artist`。除了这两个之外,不能有第三个值。默认值是什么?默认值将是 `user`。
默认值是 `user` 的意思是?意思是,如果在创建用户时你没有提供任何值,也就是说,你没有提供 `user`,也没有提供 `artist`,那么我们将默认假定为 `user`。我们将默认假定为 `user`。很好。
所以,我们的用户模式,用户模式我们已经创建好了。然后现在如果我在这里,`const UserModel = mongoose.model('User', UserSchema)`。然后我们在这里说 `User`,然后 `UserSchema`。很好。
然后 `module.exports = UserModel`。非常棒。
所以你已经创建了用户模型。现在我们需要在这里创建一些 API。是什么 API?基于身份验证的 API。所以要创建 API,我们再创建一个文件夹。`routes` 文件夹。然后在 `routes` 文件夹中创建一个文件 `auth.routes.js`。我们创建一个文件。
所以 `const express = require('express')`。我们 `require` 了 `express`。然后 `const router = express.Router()`。然后我们可以说 `module.exports = router`。然后这个我们在这里创建的 `router`,在 `app.js` 文件中,我们会 `require` 它。所以 `const authRoutes = require('./routes/auth.routes')`。我们在这里 `require` 了 `authRoutes`。然后 `require` 之后,我们会使用它,并带有一个前缀。`app.use('/api/auth', authRoutes)`。我们在这里使用 `authRoutes`。很好。
所以我们使用了 `authRoutes`。现在之后,我们要创建的第一个 API 是注册 API,用户可以在这里注册。所以为此,我们在这里来,创建一个路由,或者说一个 API。`POST /register`。而这个 API 上面的逻辑,我们将写在哪里?我们将写在 `controllers` 文件里面。所以控制器在哪里?在 `src` 文件夹里面,再创建一个文件夹 `controllers`。然后在 `controllers` 文件夹里面,我们写我们所有的逻辑。所以 `auth.controller.js`。
看,就是这样。当你谈论生产环境时,你会创建很多文件,并且你创建的所有文件都有自己的角色。所以就是这样。当你生产环境中工作时,我知道这看起来有点多:“我们还没有创建任何 API,但我们已经创建了这么多文件,而且我们应用程序中还没有一个可用的 API。”。我知道这看起来是这样,但请相信我,当你在这里创建很多文件时,所有文件都有自己的角色。就像,所有与身份验证相关的 API,它们都会在 `auth.routes` 中。然后所有中间件,它们会在 `app.js` 文件中。同时,服务器创建,也在 `app.js` 文件中创建。然后 `models` 文件夹里面,你可以说,我需要存储在数据库中的数据类型,我在这里说明:这些是我的模型,这些是我的模式,所有模式都在 `models` 文件夹中。`db` 文件夹里面,我的服务器将如何连接到数据库,所有逻辑都在这里。在 `controllers` 里面,API 的所有逻辑,我已经在 `routes` 文件夹中创建了,这些逻辑都将进入 `controllers` 文件夹。
所以你在这里看到的每一个文件,它们都有自己的角色。所以单独来看,你可能会觉得文件太多了,是在浪费文件。但是当你作为一个团队工作,并且所有人都知道“这段代码在这里”的时候,如果你遵循一个良好的文件夹结构,它会非常有益。它真的会让你的开发过程变得非常顺畅,非常快速。所以,因此,我们应该遵循一个良好的文件夹结构。必须遵循。
就是这样。你写代码的质量越高,代码的质量越好,就越好。很好。
现在,如果我们在这里继续前进。我们会进入 `controllers`。进入 `controllers` 之后,我在这里 `const UserModel = require('../models/user.model')`。我们 `require` 了 `UserModel`。然后 `require` 了 `UserModel` 之后,我们在这里创建一个特定的函数。`async function registerUser(req, res)`。然后是我们的函数体。
现在,我会有什么数据进来?所以我会在这里有 `const { username, email, password, role } = req.body`。然后 `role`,它将是我们的默认值。所以 `role`,它可能的一个默认值是 `user`,意思是,如果请求体中没有 `role`,那么它的默认值将是 `user`。很好。
现在,如果我们在谈论。所以我们可以做什么?好吧?所以现在我们在这里。我们可以 `try` 和 `catch`。但首先我会检查,用户名和电子邮件是否已经存在。为什么我这么说?看,当我们创建模式时,我们对用户名说了什么?`unique`。并且我们对电子邮件说了什么?`unique: true`。两者都是 `unique: true`。意思是?意思是,用相同的名字和相同的电子邮件,任何用户都不能再次存在。任何用户的,看我怎么说?什么意思?
假设我们这里有两个用户。一个用户是 User 1。User 1 的用户名是 `a`,User 1 的电子邮件地址是 `a@a.com`。然后我们这里还有另一个用户,假设是 User 2。User 2 的用户名是 `b`,User 2 的电子邮件是 `b@b.com`。很好。
然后看。现在我不能做什么?我根据模式说了什么?用户名必须是唯一的,电子邮件也必须是唯一的。所以我现在不能创建第三个用户,他的用户名是什么?他的用户名是 `a`,同时他的电子邮件是什么?`a@a.com`。这个我绝对不能做。为什么?因为如果我把他的用户名设为 `a` 和电子邮件 `a@a.com`,那么它就和 User 1 的用户名相同了。
但是你知道我同时也不能做什么吗?我不能在这里创建一个用户,他的用户名是 `a`,但电子邮件是 `b@b.com`。我也不能这样做。为什么?因为看,这个用户名,已经是 User 1 的用户名了。而我们的电子邮件地址,这是 User 2 的电子邮件地址。所以,我不能用相同的凭据创建第三个用户。为什么?因为我的用户名和电子邮件都是唯一的。
所以为了检查这个条件,我将使用什么查询?看,`UserModel`。现在进入 `controllers`。然后在这里,我将运行一个查询,说“兄弟,检查用户是否已经存在”。`const isUserAlreadyExist = await UserModel.findOne(...)`。然后在这里,我们这次要运行的查询是什么?是 `$or` 操作符。那么这个 `$or` 操作符会做什么?
好吧,先运行一个普通的查询。用用户名和电子邮件来查找我们的用户。所以看,现在会发生什么?现在会发生什么?听着,听着,听着。
如果我运行这个查询。如果我在这里运行这个查询,那么会发生什么问题?听着。我们这里仍然有两个用户。User 1 和 User 2。而我的 `req.body` 中,我的 `req.body` 中,用户名和电子邮件是这样的:用户名是 `a`,电子邮件是 `a@a.com`。所以注册 API 的 `req.body` 中,我有一些细节。用户名是 `a`,电子邮件是 `a@a.com`。
所以现在如果我在这里运行这个特定的查询。这个我将在这里执行的查询。所以,假设我的查询将是这个。那么在这里会发生什么?`username` 将是 `a`。`email` 将是 `a@a.com`。很好。所以我会找到这个 User 1:他的用户名是 `a`,电子邮件是 `a@a.com`。所以这个用户会在这里正确地找到。
但是,但是,但是。好的,如果用户名是 `b`,电子邮件是 `b@b.com`。那么这次我们的查询将是什么?这次我们的查询将是 `b`,电子邮件将是 `b@b.com`。所以我的 User 2,他的用户名是 `b`,电子邮件是 `b@b.com`。所以 User 2 会被返回。但是,但是,但是,但是。
现在听着。现在假设用户名是 `a`,而现在这里的电子邮件是 `b@b.com`。现在听着。现在我们没有一个用户,他的用户名是 `a`,电子邮件是 `b@b.com`。但是我们有两个用户,其中一个的用户名是 `a`,另一个的电子邮件是 `b@b.com`。但是我们没有第三个用户,他的用户名是什么?他的用户名是 `a`,电子邮件是 `b@b.com`。这个用户不存在。这个第三个用户是虚构的。它不存在。
所以现在,如果你运行这个查询,它的查询是什么?“找到那个用户名是 `a` 的用户,并且找到那个电子邮件地址是 `b@b.com` 的用户。”但是这种类型的用户,根据这些查询,用户根本不存在。所以我们的 `findOne` 会返回什么?会返回 `null`。
但是,但是,这有问题,对吧?你请求体中的数据,用户名 `a`。这个用户名已经存在了。并且这个电子邮件也存在一个用户。
如果已经存在,那么您会遇到问题,因为用户已经存在,但具有相同凭据的用户不是一个,而是不同的用户。所以这里会出问题,您会收到错误。为了解决这个问题,我们遵循的方法叫做“或”运算符。或运算符要求一个数组,这个数组包含多个条件。
例如,第一个条件我们将放在第一个对象中,第二个条件放在第二个对象中。那么在第一个条件中我会说什么?在第一个条件中,我会说:请给我那个用户名是 A 且电子邮件是 b@b.com 的用户。然后看看会发生什么?这个“或”运算符需要多个条件。它会向您询问多个条件。并且在这些条件中,如果有一个用户满足其中一个条件,那么就返回该用户。
例如,我说了“或”条件:请返回用户名是 A 或者电子邮件是 b@b.com 的用户。那么用户一,我们的用户一,它的用户名是什么?是 A。这意味着它满足第一个条件。所以这个用户将被返回。
好的,如果这里我给用户名 C 呢?这次我们将在查询中使用的用户名是什么?是 C。对吧?那么现在“或”运算符中有两个条件。请给我那个用户名是 C 或者电子邮件是 b@b.com 的用户。
那么现在,这里返回的用户一,它的用户名不是 C,也不是它的电子邮件是 b@b.com。所以这个用户不会被返回。
现在如果我谈论用户二,它的用户名是 B,不满足这个条件。但是第二个条件,电子邮件是 b@b.com,它满足这个条件。所以用户二将被返回。
这意味着什么?这意味着,如果用户通过用户名或电子邮件存在于我们的数据库中,它将被返回。但是我们需要使用哪个运算符?是“或”运算符。所以我们在这里使用“或”运算符。并且“或”运算符要求一个数组。第一个条件我们将根据用户名查找。第二个条件我们将根据电子邮件查找。然后,如果我在这里根据用户名或电子邮件找到一个用户,我将在这里得到那个用户。
并且我会应用一个简单的条件:如果用户已存在,则返回 409 状态码,表示用户已存在。如果用户不存在,那么我们在这里说什么?现在我们可以在这里创建一个用户。所以我们在这里创建一个用户。
所以我们来到这里,创建一个常量用户 = await UserModel.create()。在 UserModel.create() 中,我们将说:请根据用户名、电子邮件、密码和角色创建一个用户。创建用户后,我们需要创建一个令牌。对于令牌,我们需要 JSON Web Token。我可以说它的名字是 JWT。并且在 JWT 之后,我还需要一个密钥。生成密钥很容易,只需访问 jwtsecrets.com。这是我们的网站 jwtsecrets.com。输入。输入后,这个网站将为您生成一个密钥。复制。复制后,在 .env 文件中,我将使用 JWT_SECRET。这是我的密钥。复制这个名字。复制后,在 authController 中,我需要创建一个密钥,或者说一个令牌。
所以常量令牌 = jwt.sign()。在 sign() 中,我们将说:我们的 ID 将是 userId。并且我将提供另一个属性:userRole。但是角色不是唯一的。我们只有两种角色:用户和艺术家。但是您说过,在创建令牌时使用的数据需要维护两个属性。哪两个?首先,数据应该是用户的数据。同时数据应该是唯一的。是的,我就是这么说的。但是这次你看,我们已经有一个唯一的数据了。所以如果你在创建令牌时至少使用一个唯一的数据,那就足够了。我们有足够的。
而你的角色,这是用户的角色。所以我们的工作就完成了。只需要使用一个唯一的数据。注意这一点。第二个我们将使用 process.env.JWT_SECRET。我们将在这里使用这些。
并且我们将生成的令牌,我们将在这里设置到 cookie 中。设置到 cookie 后,最终将以 JSON 格式返回响应。状态码为 200。消息是“用户注册成功”,并且我们将共享用户的详细信息。所以用户,我们将在这里返回他的 ID、用户名、角色等所有这些信息。很好。所以我们的注册 API 已经完成了。不,还没有。听着,还有一件非常重要的事情。是什么?是密码哈希。
现在什么是密码哈希?我告诉你。我正在搜索 Google。你也可以搜索。我现在只是在搜索。为什么密码哈希很重要?所以,Gemini 会在这里告诉你为什么密码哈希很重要。现在,什么是哈希?我将谈论哈希是什么。为什么使用它?先看看这个。听着。
所以,免受数据泄露的侵害。如果数据库被泄露,攻击者只会获得哈希密码,而不是原始可读密码。现在,这意味着什么?这意味着,即使你的数据库被泄露,攻击者也只会得到哈希,而不是原始密码。如果他们没有原始密码,他们就无法访问你的账户。这里有一点。
好的,现在看看。我们需要在这里执行什么?我们需要在这里执行哈希。那么哈希中有什么?现在看看哈希中有什么。所以,如果我告诉你哈希是什么,那么,例如 MD5 哈希。如果我在这里搜索 MD5 哈希。那么哈希是一种算法,或者说是一种加密算法。这里有什么?你有一个密码,或者任何明文。例如,我们的这个文本是明文。所以如果你通过哈希对这个文本进行哈希,会发生什么?这个文本将生成一个非常随机的值。例如,这个文本被转换成了这个值。
所以,如果我来到 Xcalidraw。来到 Xcalidraw。它在这里打开了。打开它。那么现在发生了什么?这里我们拥有的哈希,这个哈希是什么?这个哈希是我们文本的。所以我们给的文本。等等,等等。好的。所以这个工作得很好。对吧?对吧?所以这是我们的哈希,这是我们的文本。这个文本是从这个特定哈希中提取出来的。所以当我通过哈希处理我的明文文本时,我执行了哈希。执行哈希后,我得到一个计算好的字符串格式的值。
现在,这里的哈希是什么?这里是哈希。哈希是什么?它是一种加密算法,你可以将明文转换为哈希。那么它们的属性是什么?它们主要有两个属性。什么?看看这两个属性。所以,如果你给出相同的输入,你总是会得到相同的输出。这意味着什么?这意味着,如果我在这里再次输入“test”,并再次对其进行哈希,那么会发生什么?我将得到相同的输出。如果我在这里以隐身模式打开这个网站,并且输入仍然是“test”。那么这次生成的哈希将再次是相同的。所以,这是我的哈希,并且这个哈希如果你在这里比较,这个哈希将是完全相同的。
所以哈希的第一个属性是什么?哈希的第一个属性是,无论你的输入是否相同,如果你在这里的输入相同,你总是会得到相同的输出。这是第一个属性。第二个属性是什么?哈希的第二个属性非常简单。第二个属性是这样的:你不能将哈希转换回你的明文。这不允许。也就是说,你根本做不到。
第一个,还有什么?你的哈希算法,你的哈希算法不允许你在这里将哈希转换回你的明文。这是不允许的。只记住这两个属性。你的哈希只有两个属性。什么?因为如果你输入相同,你总是会得到相同的输出。并且,它是什么?我们称之为明文。我们称之为明文。这是我们的明文。这是我们的明文。这是我们的明文。而这个术语,我们称之为哈希。很好。
所以,你的明文可以转换为哈希。但是你的哈希无论如何都不能转换回你的明文。这是绝对不可能的。好的。是的,这是一个属性。另一个属性是什么?如果你总是给出相同的明文,你总是会得到相同的哈希。所以这就是哈希。
那么哈希有什么用?哈希有什么用?这意味着,我们不会将我们的密码以明文格式存储在数据库中。我们会将其转换为哈希,并将哈希存储在数据库中。这样有什么好处?这样有什么好处?这意味着,当发生什么事情时,如果我的数据库以任何原因被破坏,如果数据库在那里泄露,那么即使数据库被泄露,攻击者也只会得到哈希,而不会得到原始密码。为什么?因为攻击者即使得到了哈希,也无法从哈希生成原始密码。他们根本无法生成明文。这就是为什么我们执行哈希。还有很多好处。如果你想在这里看看,暂停视频一次,然后执行一次,你就会明白。很好。
现在,如果我们在这里继续,看看。那么,我们使用哪个包来执行哈希?要执行哈希,我们需要一个特定的包。npm install bcryptjs。所以,我们的 bcryptjs 是一个包。并且我们使用这个包将我们的明文密码转换为哈希。
所以,回到 npm run dev。输入。输入后,现在会出现一个错误,因为开发阶段没有问题,我们会修复它。const bcrypt = require('bcryptjs')。要求后,我们将哈希密码。hashPassword = await bcrypt.hash()。在 hash() 中,我们可以说:密码。所以,将从 req.body 传来的密码在这里生成。并且这个 10 是什么?这里发生了什么?先理解一下。
你看,我们的明文密码,从 req.body 传来的密码,我用 bcrypt.hash() 方法将其转换为哈希。这是一个异步过程,所以你必须在这里使用 await。所以,看看。主要工作是什么?我们将明文密码转换为哈希。而这个 10 是什么?10 是盐。所以,你可以根据自己的喜好选择盐。不同的网站、不同的服务器有不同的盐值。盐有什么作用?你可以给一个。
这个盐化,它在哈希之前为每个密码添加一个唯一的随机值,使彩虹表和暴力破解攻击对攻击者更加困难和耗时。也就是说,你可以说,盐的作用是延迟任何可能发生的攻击。也就是说,它不预防。看,它预防。没有哪种攻击是能让你的服务器 1% 安全的。是的,你可以延迟攻击者。延迟多少?延迟数千年?延迟数千年?字面意思是,数千年是一个很大的数字,实际上不可能让攻击者活数千年。所以我们可以延迟它。延迟多少?延迟数千年。
所以,理论上没有哪种攻击能让你的服务器 100% 安全。但是如果从现实来看,即使你将攻击者延迟了 1000 年,它也可以被认为是近乎 100% 的安全性。从理论上讲,它不是 100% 安全的。但我们的工作就完成了。目前就是这样。
所以,哈希将生成。并且我们将使用这个哈希来保存我们的密码到数据库。现在,我们创建的这个控制器,这个注册用户控制器,我们在这里创建了它。现在来到这个控制器,module.exports = {}。在对象中,我们将导出 registerUser。导出后,我们的 authRoutes 将在这里。
来到这里,const authController = require()。并且在这里我们将说:在 controllers 文件夹内,require authController。并且在 require authController 后,使用 authController.registerUser。很好。
所以,之前的问题就是这个。它之前给了错误。现在还有一个错误。Mongoose?我们没有安装 Mongoose 包吗?天哪。npm install mongoose。我们安装了 Mongoose 包。否则它怎么一开始就能连接到数据库?npm run dev。
所以,现在如果我在这里看看,我的服务器所有东西都连接好了。很好。并且我的 API,如果我在这里发送请求,我刚刚开发的。那么来到 Postman。来到 Postman 后,这些 API 都可以删除了。我们的新 API 方法将是 POST。localhost:3000/api/auth/register。在 Body 中,如果我来到 Raw 格式,我们可以说什么?我们的用户名将是 test。test 之后,我们的电子邮件将是 test@test.com。这里有一个逗号。然后我们将谈论密码。目前我们可以使用 test。所以用户名是 test。电子邮件是 test@test.com。密码是 test。很好。
现在看看,我们的 req.body.register 需要什么?它需要四样东西:用户名、电子邮件、密码和角色。所以我们发送用户名、电子邮件和密码,但没有在 req.body 中共享角色。那么它的默认值是什么?将是 user。并且将创建一个具有 user 角色的新用户,并且我们将返回它。
所以,现在发送它。发送后,用户已创建。它的角色是什么?是 user。对吧?现在,如果我在这里发送一个 username_2 和它的 email_2,以及一个 role。并且角色是 artist。对吧?现在如果我发送它,另一个用户将被创建。但是它的角色将是什么?它的角色将是 artist。很好。
所以,我的 API,可以创建两种不同类型的用户的 API,现在已经准备好了。现在,之后,我将能够通过 artist 创建音乐。而普通用户可以收听音乐。我现在可以做到这一点。
但是在此之前,我们需要完成我们的身份验证 API。所以,我们已经创建了 registerController。现在,在创建 registerController 之后,async function loginUser = request, response。现在看看。我们在那里创建的 schema。在 UserModel 中。这里有两个唯一的东西:用户名和电子邮件。所以,你见过很多网站,你也可以通过电子邮件登录,通过电话号码登录。同时也可以通过用户名登录。用户名密码,电子邮件密码,或电话号码密码。我们将开发相同的功能。
现在我们如何开发?我们来看看。在登录时。在登录时,这里会发生什么?const username,任何我们得到的用户名,任何我们得到的电子邮件,以及密码。我们将在这里请求所有这三样东西。现在看看。我们在创建的 schema 中有两个唯一属性。一个
用户名,另一个是什么?是电子邮件。那么,如果用户愿意,他可以使用用户名和密码登录,也可以使用电子邮件和密码登录。那么,现在看看会发生什么?用户在登录时,要么发送用户名和密码,要么发送电子邮件和密码。也就是说,这两者中会有一个出现,而另一个会是未定义的。是的,这将是会发生的。明白吗?
那么,现在看看我们在这里要做什么?我们仍然假设这里有一个用户一。用户一的用户名是“a”。它的电子邮件是 a@a.com。同样地,我们有用户二,它的用户名是“b”,电子邮件是 b@b.com。很好,这次在请求体中是我们的登录API。这次我们的API是登录API,并且请求体带有一个对象,该对象中主要可以有三个属性。要么我们有用户名,可以是“a”,然后我们可能有密码。假设密码是“test”,所有用户的密码目前都是“test”。我在这里考虑“test”。我的第三个属性将是电子邮件。目前,它将是未定义的。电子邮件或密码中,两者之一会出现,而另一个属性将是未定义的。
那么听着,如果这里出现用户名“a”,电子邮件是未定义的,密码是“test”。我如何才能找到这个呢?看,我们再次在这里应用一个查询。那么我们的查询将再次使用什么呢?我们将使用美元符号和“或”运算符。那么我的一个查询将是。我们将使用美元符号和“或”运算符。在美元符号和“或”运算符中,我们将有一个数组,并且该数组中将有多个条件。那么第一个条件将基于用户名。用户名将基于用户名。兄弟们,听着,现在你们需要看这里,这是一个有点重要的话题。这是一个有点重要的话题。美元符号和“或”运算符在很多地方都会用到。伙计,现在你需要专注于屏幕。现在专注于屏幕。如果你的注意力曾经分散到其他地方,不要让它分散。现在你专注于屏幕。现在专注于屏幕。你会明白所有事情的。如果你碰巧在哪里走神了,那就去一次。洗脸,泼点水。困了。你去洗脸,然后从5分钟前重新开始看视频。无论你错过了多少。无论你脑子里清楚多少。你会知道“兄弟,这部分我没明白”。你会知道那件事,所以不要自欺欺人。从你开始不明白的地方。如果所有事情都明白了,那就太好了,你和我一起继续。但是如果从你开始不明白的地方,回到那个点重新看,然后继续。然后,直到事情清楚为止,继续看视频,然后你才能继续。好了,现在我们继续。
那么看,我们在这里使用美元符号和“或”运算符。在美元符号和“或”运算符中,我们将再次设置用户名和电子邮件这两个条件。现在我这里的用户名是什么?我的用户名是“a”。电子邮件是什么?我的电子邮件在这里是未定义的。那么我这里的电子邮件是未定义的。那么现在看看会发生什么?现在当这个查询运行时,如果任何用户满足这两个条件中的任何一个,那么用户就会返回给我。是的,会返回。那么第一个条件是什么?兄弟,哪个用户的用户名是“a”?我们的用户一的用户名是“a”。那么我们的第二个条件呢?它没有被满足。但是当使用美元符号和“或”运算符时,不需要两个条件都满足。如果两个条件中有一个满足,我们也会考虑那个用户。那么现在会发生什么?我们的第一个条件被用户一满足了,所以我们甚至不会检查第二个条件。
好的,如果你在这里假设你的用户名是“a”。明白吗?但用户也可能发送你的电子邮件,那么如果他发送电子邮件 a@a.com,你的用户名在那里将是未定义的。是的,那里将是未定义的。那么我们将在这里得到未定义。那么现在看,这里的用户名会是什么?用户名将是未定义的。你的电子邮件将是 a@a.com。那么现在听着,当我们检查第一个条件时,哪个用户的用户名是未定义的?既不是用户一也不是用户二。用户一的用户名是“a”。用户二的用户名是“b”。所以没有一个用户的用户名是未定义的。但是第二个条件是什么?找出电子邮件是 a@a.com 的用户。那么我们的用户一的电子邮件地址是什么?是 a@a.com。所以第一个条件没有人会满足,但是第二个条件用户一会满足,并且用户一会返回。那么我们只需要在这里应用这个条件。我们需要在这里应用这个查询。
那么 `const user = await UserModel.findOne()`,在 `findOne` 中,我们将再次使用美元符号和“或”运算符。用户将基于电子邮件进行查找。好的,如果用户给出了这样的条件,比如 c@c.com。那么听着,现在这个特定的电子邮件,没有任何用户存在。那么 `findOne` 在这里会返回什么?`findOne` 在这里会返回 `null`。如果我们在这里没有找到任何用户,那么 `if (!user)`,我们在这里会说 `return`。并且在返回时,我们在这里会说 `return res.status(401).json({ message: 'Invalid Credentials' })`。为什么会是无效凭据?无效凭据在这里出现是因为,兄弟,你提供的电子邮件或用户名,我们都找不到任何用户。所以你输入的凭据是错误的。
那么听着,这里会发生什么呢?兄弟,用户我们会找到的。我们会找到用户。是的,肯定会找到。那么现在找到的用户将基于电子邮件或用户名。现在我们需要在这里检查什么?检查密码是否存在。那么为了在这里检查密码,我们在这里会说 `const`。好的,听着,听着,听着,听着。之前我告诉过你,我们保存在数据库中的密码是什么?我们保存的是哈希值,而不是明文。所以这次我们不检查明文转换。我们转换的是哈希值。怎么做?看,为此我们也创建了一个 bcrypt 库,所以我们在这里创建一个变量,一个标志。`isPasswordValid`。那么 `isPasswordValid = await bcrypt.compare()`,在 `bcrypt.compare` 中,我们将传入我们收到的密码,以及从数据库中获取的密码 `user.password`。听着,这个 `user` 是从哪里来的?这个 `user` 是通过 `UserModel.findOne` 获得的,也就是说它来自数据库。所以如果我从数据库中读取用户数据,它也会有密码,而这个 `bcrypt.compare` 方法做什么呢?它会首先将用户输入的密码转换为哈希值。转换为哈希值后,它会与我们数据库中保存的那个特定哈希值进行比较。如果两者相等,就意味着兄弟,密码是有效的,如果密码有效,我们就让他登录。那么如果密码在这里不有效。`if (!isPasswordValid)`。也就是说,如果兄弟,密码无效,你就会从这里返回。你在这里给出响应状态消息“无效凭据”。如果密码有效,你首先创建一个令牌。在 JWT 中,你可以说 ID 和角色,你只在这里说这两样东西,并且为了创建令牌,你需要一个 JWT 密钥,你将在这里使用它。你创建的令牌,再次将其设置到 `res.cookie` 中,并且 `res.status(200).json({ message: 'Logged in successfully' })`,你将在这里分享这些东西。那么这就是你的哪个登录API?不是登录API,你现在创建的是登录控制器。你将从这里导出登录控制器,所以导出了 `loginUser`,然后我们来到我们的用户认证路由,在这里我们将使用 `router.post('/login', loginController)`,在我们的登录API中使用登录控制器。很好。
那么现在我们已经在这里创建了两个不同的API。那么这两个API,现在会发生什么呢?我所有的数据库,数据库的名字是什么?Comet。所以数据库的名字是Comet,在Users集合中有两个用户。两者的密码是什么样的?我们的密码在这里。我们的密码在这里以哈希形式保存。很好,我们的密码在这里以哈希形式保存。好的,没问题。两者的角色是什么?一个的角色是用户。另一个的角色在这里是艺术家。一个的电子邮件是 test@test.com,另一个是 test@test.com,它的测试是 test_2,而它的电子邮件是 test@test.com。很好。那么我们得到的是一个普通用户。让我们尝试用这个用户登录。首先我们来到Postman,登录API,登录API,所以 `localhost:3000/api/auth/login`,我们在这里的请求体中发送数据。目前,看,我们可以在这里发送用户名、电子邮件、密码,也就是说可以发送用户名和密码,也可以发送电子邮件和密码。现在我们在这里发送用户名,用户名将是“test”,而我现在要发送的密码将是错误的密码“test123”,这不是任何用户的密码。那么如果我现在发送这些,我将在这里收到“无效凭据”。好的,如果我在这里输入“test”和“test”,这两个都是正确的密码,同一个用户的名字是“test”,密码也是“test”,那么如果用户名和密码都正确,我们就可以在这里登录。很好,我们在这里会登录。之后,如果我来到这里,如果我使用电子邮件登录,假设我来到这里,我使用电子邮件登录。那么我将收到的电子邮件是 test@test.com_3,使用这个特定的凭据,没有任何用户存在。所以这里会显示“无效凭据”。但是如果我谈论下划线二,密码是“test”,那么使用这个特定的凭据,我们的艺术家是存在的。那么你看,我发送了这个,我的角色在这里是什么?是艺术家。也就是说,我在这里可以轻松地看到我的艺术家用户。很好。我的令牌将在这里保存。那么看,现在令牌已清除。已登录。登录后,已登录。令牌应该已经创建了。令牌创建后,它应该会设置在cookie中。很好。那么现在我的登录和注册API,这两个API我已经创建好了。
那么接下来我们要做什么?之后,我们现在需要创建一个API,只有艺术家才能创建我们的音乐。其他普通用户如果想创建音乐,应该会收到403禁止错误。那么我们需要创建这样一个特定的API。那么这个API要如何创建呢?那么看,我们来到这里。在一个 `routes` 文件夹中,我们将创建一个文件 `music.routes.js`。这将是我们的一个文件。我们在这里会说 `require('express')`。所以 `const express = require('express')`,我们在这里会说,兄弟,你在这里 `require('express')`,然后这个不小心出现的点我们将删除,并且 `const router = express.Router()`,然后我们可以从这里导出 `module.exports = router`。我们将来到 `app.js` 文件,就像我们 `require` 了 `authRoutes` 一样,以类似的方式,我们将 `require` 我们的 `musicRoutes`,并且在 `app.use('/api/music', musicRoutes)` 中,我们将使用这个前缀和 `musicRoutes`。很好,我们还需要在这里创建一个控制器。那么在 `controllers` 文件夹中,我们将创建一个新文件,我们称之为 `music.controller.js`。我们将在这里说这个。很好。
那么看,我们在这里需要一个特定的模型,即音乐模型,我们可以说,为了将音乐的详细信息保存在数据库中,我们需要一个特定的模式。那么我们来到 `models` 文件夹。我们将创建一个文件 `music.model.js`,我们在这里 `const mongoose = require('mongoose')`,并且在 `require('mongoose')` 之后,我们在这里将创建音乐模式。那么我们在这里将创建音乐模式。现在看,音乐中会有哪些东西。简单来说,我们的音乐文件将上传到 ImageKit。为此,我们将保留 ImageKit 的URI。那么我们在这里可以说 `URI`。在 `URI` 中,我们可以说,兄弟,它的类型将是字符串,同时它将是必需的。 `unique: true` 现在不需要,我看不出 `unique: true` 的必要性,它们是不同的。然后在 `URI` 之后,我们需要在这里给出 `title`,兄弟,标题是什么,它的类型将是字符串,应该是 `required: true`。最后,哪个特定的艺术家创建了这个特定的音乐,你可以说那个艺术家的ID。我们需要在这里提供详细信息。所以我们通常在模式中使用ID。那么它的类型将是 `mongoose.Schema.Types.ObjectId`,我们还需要在这里提供一个引用。看,你在这里要存储什么?你将在这里存储哪个艺术家创建了这首音乐。你将存储他的ID。是的,我们肯定会这样做。好的,那么你将存储那个特定艺术家的ID。是的,就是这个。明白吗?好的,这个艺术家最终是什么?这个艺术家最终是什么?一个特定的用户。那么这个艺术家,艺术家的详细信息将保存在哪个特定的集合中?它将保存在用户集合中。那么你需要在这里提供用户集合的引用。那么你的用户集合的名称是什么,例如在用户模型中,我们集合的名称是什么?我们称之为“User”。那么你将在这里给出这个名称,并且它将是 `required: true`。我刚刚注意到音乐模型文件的名称是错误的。很好,现在这里没问题了。
那么我们的音乐模式已创建,在音乐模式创建之后,我们在这里将创建 `const MusicModel = mongoose.model()`。我们在这里会说“Music”,然后在“Music”之后,我们在这里使用 `MusicSchema`。很好。那么我们创建了音乐模式,并从这里导出它。很好,已导出。导出之后,在我们的控制器中,在音乐控制器中,我们首先将 `require` 音乐模型。所以 `const MusicModel = require('../models/music.model')`。我们 `require` 了音乐模型。很好,已 `require` 音乐模型。之后,我们现在将创建一个特定的异步函数。`function createModel = createModel`,我们的函数将接收 `req` 和 `res`,在 `req` 和 `res` 之后,我们的函数体将在这里。很好。
那么现在看,这里要做什么?我来向你解释一下整个流程,兄弟,这里到底要做什么?听着。首先,我们需要使其受保护。受保护是什么意思?兄弟,这个创建音乐的API,只有艺术家用户才能访问。如果普通用户尝试访问,也就是说,我们有两种类型的用户,看,我们在创建用户模型时提到了两种类型的用户。一个是普通用户,另一个是艺术家。那么,只有角色是艺术家的用户才能创建音乐,其他任何用户如果想访问这个特定的音乐,都将收到403禁止错误。那么我们需要在这里实现这一点。那么我们如何知道这一点呢?听着。当用户注册或登录时,他们会得到一个令牌。而这次我们创建令牌时,我们在这里创建令牌时,令牌中包含了两样东西。是什么?首先我们在这里放置了ID,即那个特定用户的ID是什么?其次我们在这里放置了角色,即那个特定用户的角色是什么?我们在这里放置了这两样东西。那么这次会发生什么呢?兄弟,用户或任何请求将进入我们的音乐控制器,在那里我们需要创建一个音乐。不是 `createModel`,我们这里将是 `createMusic`。明白吗?那么我们在这里可以说 `createMusic`。那么现在任何请求如果来到 `createMusic`,会发生什么呢?我们会检查兄弟,那个请求中是否有令牌?令牌是否正确。当我们验证令牌时,你在创建令牌时放入其中的数据会返回给你。那么这次你会得到什么数据?这次你在创建令牌时放入了什么数据?这次你在创建令牌时放入了ID和角色。那么当你验证令牌时,你将同时获得ID和角色。我们会在那里检查,如果我们的角色是艺术家,那么就继续。如果不是艺术家,也就是说是一个普通用户,那么你可以在那里给出403禁止错误。现在我可以说一件事吗?你可能什么都没明白。我知道你可能什么都没明白。那么现在我们来看一下代码实现,那时你就会非常清楚地明白我们在这里到底要做什么。让我先喝口水。我已经录制了很长时间了。因为所有内容都连续录制了一个小时。让我先喝口水。
那么看,我们要做什么呢?在我们的音乐控制器中,我们首先会提取 `const URI` 和所有这些东西。首先我们在这里会提取令牌。令牌从哪里
会得到?我们从 request.ces.token 中获取 token。我们检查一下,如果 token 没有收到,就直接返回。没有必要继续前进,因为我们直接假设任何请求中如果没有 token,就意味着该请求来自一个未经授权的用户。该用户没有登录或注册,所以我们可以直接返回。如果收到了 token,就需要验证这个 token。为了验证,我们需要一个包,它的名字是 JWT。现在听着,JWT 有一个方法叫做 jwt.verify。将 token 传递给 jwt.verify,以及 process.env.JWT_SECRET。这里还有一件事:听着,当 jwt.verify 验证 token 时,它可以产生两种输出。如果 token 是错误的,它会抛出一个错误;如果 token 是正确的,你创建 token 时所用的数据就会返回给你。为了避免错误,我们在这里使用 try-catch。所以我们在这里使用 try,然后使用 catch error。在 catch error 中,我们将返回 response.status(401).json({ message: "Unauthorized" })。很好。所以听着,在创建 token 时,如果发现 token 是错误的,就会出现一个错误,我们将在 catch 部分处理它。我们将返回 response.status(401).json({ message: "Unauthorized" })。如果 token 被验证,我们将得到数据。我们将把这些数据保存在 decoded 中。这通常是它的名字。现在看看这里会发生什么?我们得到了 decoded。在 decoded 中,我们将检查 decoded 中的 role,如果 decoded 中的 role 不等于 artist。如果它不等于 artist,那么你就直接返回。返回 403,消息是 forbidden。我们可以说 "You don't have access to create an music"。我们可以这么说。Forbidden 通常是 403 的名字。Forbidden 的意思是。但我们在这里给了更多的访问权限。"You don't have access to create an music"。很好。如果他有创建音乐的权限,我们就会让他继续。这里不应该有问题。所以,如果他有所有权限,如果他有所有权限,我们就会让他继续。怎么做?听着,为了创建一个音乐,我们需要一些东西。首先是它的标题。所以标题会在这里。我们将从 request.body 中提取标题。然后这里会有一个文件。所以我们的文件将来自 request.file。现在我们需要一个 ImageKit。设置 ImageKit。为了设置 ImageKit,我们将去 ImageKit 的文档。这是我的 Safari 浏览器。我们将在这里搜索 ImageKit 文档。ImageKit 文档。文档已经改变了。所以我们再看一遍,因为不是开发者,开发者每次都需要阅读文档。他必须学会阅读文档。如果你也是一个好的开发者,如果你认为自己是,那么你必须学会阅读文档。这绝对会发生。现在听着,文档已经改变了。所以它首先说,先安装 ImageKit。好的?我们在这里安装 ImageKit。npm install imagekit-nodejs。我们安装了它。安装后,ImageKit 的代码位于 src 文件夹下的一个名为 services 的文件夹中,services 文件夹下有一个名为 storage.service.js 的文件。这段代码会进入这个特定的文件。很好。现在如果我在这里,我们如何设置它?我们是这样设置的。怎么设置?所以我们可以说 import。现在我们不使用 import。我们也可以使用 import。它差别不大。但现在我们不使用它。require @imagekit/nodejs。我们需要 ImageKit。我们需要一个大的 ImageKit。为了初始化它,const client,或者我可以称它为 imageKitClient = new ImageKit()。之后,我需要一个私钥。我想。私钥。我可以在 process.env.IMAGEKIT_PRIVATE_KEY 中设置。所以这里会有两个凭证。这里会有一个第三个凭证。所以我们的 ImageKit 的仪表板是 imagekit.io。登录。它会问我密码。好的?提交。如果我来到开发者仪表板。所以加载需要一点时间。开发者选项。开发者选项下,请稍等。因为有些东西我不能展示。所以你在这里会找到私钥。复制它,然后在这里提交。我找到了我的私钥。我可以把它粘贴在这里。很好。所以我的私钥已经在这里了。私钥之后,我想我的 ImageKit 设置就完成了。我可以把它带回来。很好。所以现在看看会发生什么?现在这里会发生的是,我们将在这里创建一个函数。async function。在 async function 中,我们将说 uploadFile。在 uploadFile 中,我们将在这里给出文件名。在文件名中,我们将说 const result = await imageKitClient.files.upload()。我只读过一次 imageKit.files.upload 的文档,我清楚一点,它的文档已经改变了,所以与以前的方式不同。imagekit.files.upload。我不需要第二次查看它的文档,因为概念是清晰的。听着,给我一个建议,如果你想成为一个好的开发者,不要追逐代码,不要追逐代码是如何写的。不要追逐代码是如何写的。不要试图记住代码。你怎么能记住这么多代码?我不明白。我给你看一段代码。这不是一个很大的应用程序。我有一个开源项目,我负责管理。所以如果你在这里看,这是 src。除了 src,如果我回到 test.dog,听着,这是一个 test.dog。你可以说它是我自己的开源项目。这是我自己的开源项目,我负责管理。所以这是后端。这只是后端。即使只是后端,也有这么多文件。如果我给你看 controllers,在 auth controllers 中。你可以在 GitHub 上找到它。你可以在 GitHub 上找到它。在 payment controller 和 user controller 中,如果我来到,然后如果你看 validators,where are the validators? middlewares 下的 validators。these are the validators. 所以你在这里看到,每个文件里都有很多代码。constant config 文件。如果我来到 user.dao 文件,这是这么多代码。每个文件里几乎都有这么多代码。你几乎在每个文件里都会找到这么多代码。每个文件里都有这么多代码。这只是一个开源项目的后端。当你去一个实际产品时,它将有一个与此类似的文件夹结构。而且你还没有理解很多东西,hush是什么?然后你没有看到 dockerfile。prettier.gitignore。这么多文件。just test files. 你在这里没有看到。test files. 我们用它来测试服务器是否正常工作。所以你在这里还没有看到这么多代码。你看到这么多代码。你怎么能记住它?你不能记住它。你写的任何代码,你写的任何代码,都不能记住。只有你能记住的是你的流程。只记住流程,你就可以记住任何应用程序。但你知道吗?我写了所有这些代码。我写了所有这些代码。现在如果你问我,user.test.js 文件第 100 行写的是什么?我不知道。我真的不知道 user.test.js 文件第 100 行写的是什么。如果我看了,我就会立刻明白,是的,这一行正在做所有这些工作。但我怎么能记住代码?你在开玩笑吗?我怎么能记住这么多代码?不,不会这样。任何开发者都不会记住他们的代码。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们只记住流程。他们
好的,那些拼写我记不住那么多,所以我只是这样做,album.model.js。很好。现在如果我来到这里,const mongoose。你们也会这样吗?意思是你们记不住拼写,你们只是有一个想法,哦,这可能是这个拼写的名字。这个拼写会这样写。所以我有这个问题,而且很可能你们也有这个问题。所以如果你们有,你们就不是一个人。你们不是唯一有拼写问题的人。你不是一个人。我也有,我知道你们很多人也在与这个问题作斗争。
现在看,我们将创建专辑的模式。所以,专辑模式。在专辑模式中,我们将放置三样东西。第一个将是标题,它的标题会是什么?所以第一个将是标题。标题我们在这里会说,标题类型是字符串,必需为 true。然后我们在这里会谈论音乐,这个特定专辑中有多少音乐。所以音乐将是一个数组,这里将是对象 ID 的数组。在对象 ID 中,我们的引用将是音乐的,也就是说,在音乐集合中,我们将从该音乐集合中传递 ID。最后,这张专辑是由哪个艺术家创建的,我们还需要在这里提供该艺术家的详细信息。很好。
所以我们创建了专辑模式。创建专辑模式后,我们在这里将创建一个模型。所以 const albumModel 等于 mongoose.model('Album', albumSchema),我们将创建它,并且我们可以从这里导出 module.exports = albumModel。很好。
那么现在我们在这里做什么呢?在我们的控制器中,在音乐控制器中,我没有单独创建 album.controller.js 文件,因为它没有那么大的作用,以至于我们需要为那么多专辑创建单独的路由,它的作用没有那么大。所以我们将在这些特定的控制器中导入,或者可以说 require const albumModel。我们将在这里 require albumModel。require 之后,我们在这里将创建一个异步函数 createAlbum。在 createAlbum 里面,我们首先需要检查,能够创建专辑的将是一个艺术家。为了检查艺术家,我们之前也写过这段代码。怎么做呢?首先我们在这里将提取 const token,我们将从 request.cookies 中提取 token。从 request.cookies 中提取 token 后,我们在这里将检查,如果 token 没有来,如果我们这里没有 token,那么返回 response.status(401).send({ message: 'Unauthorized' })。如果我们有 token,那么我们将验证 token。所以在 try 和 catch 里面,我们在这里会说 err,在 error 里面 console.error(err),并且返回 401 Unauthorized。好的。之后我们在这里会说一件事,我们的 token,我们将验证一次 token。所以 decoded = jwt.verify(token, ...) 我们将检查传入的 token,如果角色不是艺术家,那么返回 403 消息 "You don't have access to create an album"。很好。如果我们这里有角色,也就是说我们有 token,并且 token 是一个特定艺术家的,那么我们就可以在这里说可以创建一个专辑。
那么专辑里面会有哪些东西呢?标题和音乐 ID 将会传入。并且我们将最终在这里用音乐 ID 创建一个专辑。所以为了创建专辑,我这里需要标题、艺术家、音乐。我这里需要音乐的 ID,并且我们可以检查 decoded.id。很好。所以一个专辑将在这里创建,专辑创建后,response.status(201),在 201 中我们可以说消息是 "Created Successfully"。专辑的详细信息我们可以在这里轻松分享。在音乐里面,我们创建的模型里面有 music。好的,所以 music,好的,这里有 music。很好。所以 music 将会传入,并且 music 很好。所以我们的音乐将会被创建。现在如果我总结一下这个整个控制器。那么在这个控制器里面我们正在做什么呢?首先,我们的控制器是 createAlbum。我们正在提取 token。提取 token 后,我们正在检查 token 是否在 cookies 里面。如果 token 不在 cookies 里面,我们就可以直接在那里说用户没有登录。你可以在那里发送未经授权的响应。如果 token 在 cookies 里面,那么需要验证 token 是否正确。如果 token 没有验证成功,意思是 token 是错误的,那么在 catch 里面会有一个错误。处理错误后,我们可以从这里返回 response.status(401).send({ message: 'Unauthorized' })。完成这些后,如果 token 正确,那么 decoded 中将会有数据。会是什么数据呢?你在创建 token 时使用的数据。当你在这里的注册 API 中,在注册控制器或登录控制器上。在登录控制器中,你创建 token 时,在 token 里面你提供了 ID 和角色。那么当你验证 token 时,同样的数据会出现在哪里呢?在 decoded 中。我们在这里会检查,如果角色不是艺术家,意思是请求不是来自艺术家,而是来自普通用户,并且普通用户没有创建专辑的权限,那么我们将在这里发送 403 Forbidden 响应 "You don't have access to create an album"。然后如果他是一个艺术家,我们就会继续前进。继续前进后,我们将从 request.body 中提取标题和音乐 ID,或者说从 request.body 中提取 music.musicIds。我们将创建一个专辑,与艺术家和音乐一起。最终创建的专辑将是 201,因为将创建一个新专辑。我们在这里填写所有其他信息后,将发送响应。很好,所以我们创建了一个控制器。我们将导出这个控制器 createAlbum。然后,在我们的音乐路由中,我们在这里会说 router.post('/album', createAlbumController),我们将使用它。很好。
那么现在如果我来到 Postman。所以来到 Postman,我们将创建另一个 API。方法将是 POST,localhost:3000/api/auth/,我们的 auth 名称将是 music,在 music 之后我们将在这里说 /album。在 body 里面,以 raw 格式,我们在这里会说 title,在 title 里面我们在这里会说,比如说 "test_album_one"。然后我们这里要传入的 musicIds,musicIds 我觉得不太合适。所以我在这里给它们命名为 "musics"。好的?我将以 "musics" 的名字在这里发送东西。所以我们将以 "musics" 的名字发送,这将是一个数组,一个字符串数组。所以我们现在创建的两个歌曲。来到这里,在 MongoDB Compass 上,musics。在 musics 里面,我们有这两个 ID,我们将复制这些 ID。所以在这里复制它们,我们还将在这里复制另一个音乐的 ID。很好。所以我们用我们创建的这两个音乐来创建一个专辑。专辑的标题会是什么?"Test Album One",然后发送。发送后,我们的一个专辑,专辑应该已经创建了。如果我在 Compass 中检查,那么在这里,在 commit 数据库的 albums 里面,我有一个特定的专辑,里面有音乐。我这里有两个音乐是正确的。一个 ID,两个 ID 都以正确的方式存储在这里。并且我们这里也知道这是哪个艺术家的专辑。很好。
那么现在看,现在要做什么呢?现在需要稍微优化一下代码。怎么做?听着。你在这里创建了两个不同的控制器。一个控制器的名字是 createMusic。它会发生什么?你创建一个音乐。谁创建?艺术家创建。如果用户不是艺术家,那么他不能创建音乐。会出现 403 Forbidden 错误。同样的事情你在创建专辑时也在做。你会检查 token。token 是否存在。你会检查 token 是否正确。token 是否是艺术家的。如果不是艺术家的,你会在那里发送 403 Forbidden 错误。所以你为这两件事写的代码是重复的代码。意思是,在 createAlbum 控制器和 createMusic 控制器里面,你重复地写了大量的代码,差不多这么多代码。在两个控制器里面你都重复地写了这么多代码。那么现在什么能解决这个问题呢?中间件在这里给我们提供了解决方案。怎么做?看,首先这两个控制器,如果我谈论 createAlbum 控制器,发生了什么?你正在检查 token 是否传入。如果 token 传入,那么 token 是否正确。然后如果 token 正确,那么 token 是艺术家的还是普通用户的。你正在检查所有这些事情。同样的事情我们也可以放在一个中间件里面。怎么做?我来告诉你。
首先创建一个文件夹。文件夹的名字将是 middlewares,不是 modelwares,是 middlewares。在 middleware 文件夹里面,你创建一个文件 auth.middleware.js。你可以创建这个文件。在这个文件里面,你需要 require jsonwebtoken。并且创建一个特定的函数,在函数里面你可以说 authArtist。很好。所以你在这里会说 authArtist。并且请记住,你在这里正在创建一个中间件,中间件有三个参数。request, response 和 next。你必须保留这三个参数。我会告诉你这里到底发生了什么。首先看我在这里写的代码。给我 5 分钟。我将要写的代码你会完全理解。只要 5 分钟,一直跟着我,看看我到底在做什么。
看,我们正在创建一个中间件。中间件的名字是 authArtist。我们首先在这里检查,在我们的普通控制器里面,token 是否存在。如果 token 不存在,就从这里返回。如果 token 存在,就验证 token 是否正确。然后如果 token 验证成功,就检查 token 是艺术家的还是普通用户的。如果 token 不是艺术家的,我们就可以从那里返回。所以我们在这里会做同样的事情。我们将从 cookies 中提取 token,如果我们这里没有 token,那么我们就从这里返回 401,response.status(401).json({ message: 'Unauthorized' })。如果 token 存在,如果 token 传入我们这里,那么我们将验证 token。为了验证 token,我们在这里将使用 try 和 catch。使用 try 和 catch 后,console.log(error),response.status(401).send({ message: 'Unauthorized' }) 将会在这里发送。在 try 里面我们将验证 token。所以 const decoded = jwt.verify(token, ...),我们将验证我们的 token。因为 token 验证成功,如果 token 正确,那么 decoded 里面将会有 token 创建时使用的数据。如果 token 是错误的,那么 jwt.verify 方法会抛出一个错误。我们将在 catch 部分处理它,并且发送消息或者说响应 "Unauthorized"。现在听着,如果 token 验证成功,那么 decoded 里面将会有数据。我们在这里会说,如果 decoded 里面传入的角色不是艺术家的,那么你将从这里返回 403 "You don't have access"。你在这里只分享了这么多。如果角色在这里是艺术家的,那么这个 if 条件就不会执行。所以我们就会继续前进,并且在这里调用 next。很好,对吗?
那么现在看,你在这里会调用这么多。那么在这个整个中间件中,我们的逻辑是什么,以及我们将如何使用它。看,我的这个 authArtist 中间件,我们创建了这么多。我们已经创建了这么多。我正在从这里导出它。所以 module.exports = authArtist,我的 authArtist 中间件,我从这里导出了它。导出后,在我的 musicRoutes 文件中,我将在这里 require const authMiddleware,在 middleware 文件夹里面的 auth.middleware 文件,我正在这里 require 它。require 之后,我的这个上传路由,在上传路由中,我的 authMiddleware,我将在这里运行 authArtist 中间件。同样的事情我也会在我的 createAlbum 上做,所以 authMiddleware.authArtist,我们将在那里运行它。很好。所以我们在这里将使用 authMiddleware.authArtist。
现在看,发生了什么?仔细听。之前发生了什么。我将通过 XCalidraw 来运行并告诉你,或者我们画一下。然后我们在这里会理解到底发生了什么。听着。假设这是我们的整个服务器。这是我们的整个 Express 服务器。你刚刚创建的那个服务器。那就是那个服务器。好的?所以这是我们的整个 Express 服务器。好的?我把它完整地写下来。Express 服务器。请看。所以这是 Express 服务器。现在发生的是,你在这里发出一些请求,作为回报,这个服务器会给你生成一些响应。所以请求会来到这里。请求到来后,它会发出一些响应。所以它的一些响应会来到这里。那么在所有这些事情之间会发生什么呢?听着,请求会发送到哪里?你的 Express 服务器实例上。意思是什么?意思是,比如说我们现在正在尝试调用一个 API。API 的名字是什么?/api/music 和 /upload,我们可以在这里说。好的?所以我们的 API 的完整名称是这样的:upload。它的方法是什么?它的方法在这里是 POST。很好。所以我们现在正在尝试调用的 API,我们正在发送请求的那个 API 是 /api/music/upload,它的方法是 POST。那么听着,任何请求都会发送到你的 Express 服务器实例上,那个请求会发送到那里。意思是什么?意思是看,你在 app.js 文件里面创建的服务器实例,就是这个。服务器的请求会发送到这个特定的实例上。你在这里调用了哪个 API?/api/music,这是一个前缀。那么你的 app 服务器会做什么呢?它会匹配前缀,看看这部分在哪里可见?那么这部分会在这个特定的地方可见。它匹配 /api/auth 吗?不,我们正在调用的 API 是哪个?/api/music。所以我们将在 /api/music 这个特定部分继续前进。那么我们就会进入 musicRoutes。进入 musicRoutes 后,我们会知道前面还有 /upload。所以 /upload,我们有这个特定的部分。所以请求会以这种方式到达这里。
现在看,我在这里做了什么?在这个地方我放置了一个中间件。我在这里放置了一个中间件,这个中间件会做什么?authArtist。这个 authArtist,你的这个中间件,你在里面写了什么代码?在里面你写了代码,这里传入的任何请求,现在看,它会来到这个 API。请求会来到这个 API,因为你向这个 API 发出了请求。所以请求会来到这个 API。首先这里会运行什么?首先这个中间件会运行。然后 Multer 会运行。Multer 运行后,我们最终的控制器 createMusic 将会运行。那么请求首先会通过谁?会通过你的中间件。在这个中间件里面你做了什么?在这个中间件里面你首先写了代码,检查 token 是否传入。这是你首先写的代码。然后如果 token 没有传入,你就会从这里返回 401 Unauthorized,表示你没有 token。我们无法授权你。然后如果 token 传入,你就会在这里验证 token。如果 token 验证成功,那么 decoded 里面就会有数据。你会检查数据,或者说请求是否来自艺术家。如果请求不是来自艺术家,那么 response.status(403).send({ message: 'You don't have access' })。我们在这里会发送这么多消息,然后调用 next。那么 next 会做什么呢?我们稍后会谈到。但是如果 token 没有验证成功,你会去哪里呢?在 catch 部分。为什么?因为如果 token 无效,就会抛出一个错误。为了捕获错误,我们在这里会写 catch 部分,表示如果你的 token 是错误的,那么 401 Unauthorized 将会是你的消息。好的,如果 token 正确,并且我们的角色是艺术家,那么我们调用谁呢?next。好的,调用 next 会发生什么呢?我来告诉你。
那么看,请求来到了这个特定的 API。然后请求去了哪里?中间件。然后中间件之后请求要去哪里?uploadSingle。意思是,你的 Multer 部分,请求要发送到这个部分。这样请求就可以从一个中间件向前转发。请求可以从一个中间件继续前进。因此我们调用 next。好的,如果你不调用 next 会发生什么?如果你在这里没有调用 next,那么请求会进入中间件,但无法再向前转发到任何地方。那么现在看,这里会发生。
事情是这样的,如果你向上传API发送请求,那么请求首先会去哪里呢?去中间件。去认证艺术家中间件。在认证艺术家中间件中,我们会检查令牌是否存在。令牌是否正确。传入的令牌所属用户的角色是否是艺术家。检查完所有这些之后,我们才会调用下一个,如果所有这些条件都不满足,我们就会在这里返回状态码401的响应消息。所以,中间件就是用来做这些工作的,当然它还有其他用途。但目前,对于这个特定的功能,我们将使用中间件,因为中间件拥有非常强大的能力。
我来告诉你一个中间件拥有哪些能力。听着,中间件首先可以读取请求中包含的所有数据。第一点就是,请求中包含的所有数据,中间件都可以读取。同时,中间件也可以修改请求中包含的数据。修改数据。这是它的第二个特性。此外,中间件可以在任何时候,或者说,中间件也可以发送响应。也就是说,中间件可以做所有这些事情。是的,中间件可以做所有这些事情。它可以读取请求数据。它可以修改请求数据。并且可以在任何时候发送响应。例如,我们在这里创建了一个认证艺术家中间件。那么,如果它没有收到令牌,这个中间件就会自己发送响应,告诉你抱歉,你未经授权。它可以在这里发送一个响应。如果角色不是艺术家,它也可以在这里发送响应,告诉你抱歉,你不是艺术家。所以,中间件可以做所有这些事情。中间件可以查看特定请求体中传入的数据。它可以修改数据。同时,它也可以根据自己的需要随时发送响应。所以,中间件非常强大。
现在听着,我们已经设置了一个认证艺术家中间件。所以,我们之前在这些控制器中编写的逻辑,现在已经不需要了。所以我们现在可以把它们从这里移除。它们不需要检查令牌,因为令牌检查的工作,我们的中间件已经为我们完成了。所以,现在它们不再需要了。我将把它们从这两个地方都移除,并且这里的catch部分也会被移除。很好。
现在我只需要一个东西。那就是`album.artist`。因为我在这里无法再获取艺术家的名字了。那么我们该怎么做呢?我们的中间件,就像我刚才告诉你的,中间件有三个特性:它可以读取请求中的数据。同时,它也可以修改请求中的数据。所以我们现在要做的就是修改请求中即将到来的数据。怎么做呢?看,我正在请求中创建一个名为`request.user`的新属性。它的名字是什么?`user`。所以我会创建一个名为`request.user`的新属性,并将其值设置为`decoded`。`decoded`中包含的任何数据都将在`request.user`中创建。那么,之前是否存在名为`request.user`的值或属性呢?没有。我们正在请求中创建一个新属性,它的名字是`user`。所以我们正在创建一个名为`request.user`的新属性。并且我们将这个属性的值设置为`decoded`。那么这个`decoded`值将传递给我的API上即将到来的控制器。例如,现在会发生什么?如果在音乐路由中告诉你,请求首先会去哪里?第一个请求会去认证艺术家中间件。如果在这个中间件中我们发现用户是艺术家角色。那么我们的请求才会继续转发。但是这个中间件会做什么呢?它会在`request.user`中添加一个新属性。这个属性的名字将是什么?`user`。所以请求中会创建一个新属性。它的名字将是`user`。我们将这个属性的值设置为`decoded`。很好。
那么现在会发生什么呢?无论你将这个中间件放在哪里,如果它将请求转发出去,那么该请求中就会有一个属性。它的名字将是`user`。所以现在在这个控制器中,因为在这个控制器之前应用了什么?我们的中间件。所以这个中间件会创建一个名为`request.user`的属性。我可以在我的控制器中访问这个属性。所以现在,无论我需要标题或者说艺术家的地方,我都会像这样访问`request.user.id`,同样地,我也会像这样访问艺术家`request.user.id`。这样,我们重复的代码问题就解决了。
现在,如果我继续。我的服务器应该正常运行,它也确实在运行。我们来到Postman,我们的注册功能。好的。登录功能也正常工作。如果我谈到上传。假设我们在这里上传一首新音乐。这个,我们打开了三个。我们发送了它。发送后,我们的音乐应该在这里创建。很好。这意味着我们的中间件正在正常工作,而且我的音乐应该可以播放,我们的音乐在这里正常工作,正在播放,这是一件好事。
现在,我们的中间件,我们已经在这里实现了中间件。实现中间件之后,我们当前的文件夹结构已经开始显得有点大了。这里有两个控制器,三个模型。我们有两份路由文件。然后我们有一个中间件。一个服务文件。一个应用程序文件和一个`server.js`文件。所以,我们现在的文件夹结构已经开始显得有点大了。当然,还有很多其他文件可以创建。但是要在YouTube上完成所有这些会制作一个非常长的视频。所以在这个特定的视频中无法涵盖所有文件。但是没关系。这些也已经足够了。
现在我们继续。我们在这里创建了两个控制器。我们已经在`music.routes`中创建了两个API,即如果你是艺术家,你可以创建一首特定的音乐。同时,如果你是艺术家,你也可以创建一个专辑。现在我们将在y这里创建一些其他的API。这些API将使用GET方法,它们会做什么呢?它们将是我们的根API。在这个API上,一个普通用户可以收听我们API上创建的所有音乐,所有在我们的服务器上创建的音乐。所以我们将为此创建一个控制器。我们已经有了创建音乐控制器。已经有了创建专辑。一个异步函数来获取所有音乐,我们将收到请求和响应。在这里我们可以做什么呢?`const music = await MusicModel.find()`,在`find`中,我们在这里会说,我们执行了`find`之后,`response.send`,不,不是`response.send`,而是状态码200,以JSON格式,我们首先会发送消息“音乐获取成功”,然后我们在这里会监听我们的音乐。所以我们将从这里导出这个`getAllMusic`控制器,并在我们的API中,在音乐控制器内部使用`getAllMusic`。很好。
那么现在如果我过来,服务器运行良好。我们来到Postman。我们将为它设置一个新的API方法,GET `localhost:3000/api/music/`。现在如果我发送请求,那么我的服务器上创建的所有音乐都将在这里列出。很好。所以所有这些音乐都已列出。测试标题,测试标题二和测试标题三。很好。所有这些音乐都已列出,并且它们是由哪些艺术家创建的也在这里显示,但显示的是他们的ID。
现在你知道吗?如果你在这里提供ID作为引用,并且它的引用,也就是说你给出了ID类型为`ObjectId`,并且你在这里传递了艺术家的ID,并且你还告诉了它的引用,即这些艺术家的详细信息可以在用户集合中找到。那么你知道这样做有什么好处吗?你在这里在`getAllMusic`中使用的`find`方法,如果你再使用`populate`,并且在`populate`中你告诉它要填充艺术家,也就是你的艺术家。现在你看,艺术家这里之前显示的是什么?只显示了艺术家的ID。但是如果你在这里使用`populate`,你知道现在会发生什么吗?看,我再次发送了它。我只是在那里额外添加了一个方法。看,现在艺术家的详细信息已经开始显示了,比如它的ID是这个。用户名是这样的。我们这里有电子邮件。所以艺术家的完整详细信息开始在这里显示。这就是`populate`的作用。所以`populate`可以这样使用,它会把整个艺术家的详细信息而不是ID给你。所以我们可以这样使用它。
如果我再给你看一次,我们还有一些其他的选择,比如我只想要这里的用户名和电子邮件。那么现在我们怎么做呢?发送后,现在我这里只有用户名和电子邮件。只有这两个东西会显示。它的其他属性,比如密码,就不会在这里显示了。所以我们可以在这里以这种方式使用`populate`方法。
现在听着,我们在这里创建的这个API,它会返回所有我们在这个地方创建的音乐,但问题是什么呢?我们没有在这个特定的API上设置任何认证。那么我们如何设置认证呢?我们来看看。所以,在我们的中间件文件夹中,我们将再创建一个中间件。这个中间件的名字叫什么呢?一个异步函数`authAuthUser`,我们将在这里传递相同的三个参数:请求、响应和下一个。然后在这里我们将检查令牌,所以大写锁定是打开的,`const token = request.cookies.token`,然后我们在这里检查,如果令牌没有找到,如果我们在y这里没有找到令牌,那么`response.status(401).unauthorized`,然后我们在这里检查,如果令牌存在,那么在`try`和`catch`中,我们可以在`catch`错误中说,我们可以在这里说`console.response.status(401).unauthorized`。
现在看,我们还需要在这里做什么呢?我们将在`const decoded`中检查`jwt.verify`,`jwt.verify`令牌过程`jwtSecret`,并且在`jwtSecret`中,我们将设置我们收到的任何解码数据,并调用`next`。也就是说,它与我们之前创建的中间件类似。只是我们在这里还会检查一件事:如果`decoded.role`不等于`user`,那么我们就会从这里返回。可以给用户和艺术家两种权限。所以返回`response.status(403).youDon'tHaveAccess`。所以两者都可以获取所有音乐。这本身没有问题。但我认为为了避免混淆。所以我现在将艺术家从这里移除。并且只设置一个条件,即如果你的角色不是用户,如果你的角色在这里不是用户,那么你不能一次性获取所有音乐。很简单。只是为了避免混淆才这样做。否则,如果你愿意,你也可以在这里使用`&&`来添加艺术家。很好。
那么现在如果我们继续。很好。只需将我们的`authUser`中间件从这里导出。导出后,在我们的音乐路由中,我们可以说使用`authMiddleware.authUser`中间件。那么现在会发生什么呢?现在看,如果我在Postman中,假设我移除了这些cookie。我移除了令牌。那么现在如果我发送请求,我将收到401未授权错误。现在如果我需要在这里登录,如果我在这里登录,这是一个艺术家,而我们的普通`test@test.com`是普通用户的。所以普通用户`test`登录后,cookie中会有一个令牌,现在如果我获取音乐,所有音乐都会显示给我。
好的,现在再看一件事,如果我用艺术家的账户登录。发送后,我用艺术家的账户登录了。我保存的令牌当然是艺术家的令牌,现在如果我尝试获取音乐,我就会收到“你没有访问权限”的提示。所以我们在这里实现了一个基于角色的认证系统,即对于我们的获取音乐API,普通用户可以获取音乐,但艺术家不能使用这个API。所以这很好。我们又开发了一个基于角色的API。
接下来,我们在这里再创建一个API。这个API将是`router.get('/albums')`。我们将在这里使用相同的中间件,并且可以使用`getAllAlbums`。所以我们需要创建这个控制器。我们可以在这里创建控制器。一个异步函数,一个音乐控制器`getAllAlbums`,请求、响应。在这里我们可以使用,在`const albums`中,我们可以在这里使用相同的`Album.find()`。填充这些音乐。音乐的需求,是的,我们也可以填充它们。好的,然后我们在这里会说`response.status(200)`,并以JSON格式发送消息“专辑获取成功”,并且我们可以在这里分享专辑的详细信息。所以我们将从这里导出`getAllAlbums`,导出后,我们就可以在我们的API上正确使用它了。
为了获取所有专辑,我们来到Postman。进入Postman后,我们发送了`localhost:3000/api/music/albums`。发送后,你没有访问权限,因为我想我们现在是艺术家的账户。现在如果我使用普通用户的账户。所以,如果我现在以普通用户的身份访问专辑,我就可以正确地访问它。很好。所以我们现在在这里又开发了一个API。这个API会做什么呢?我们拥有的所有专辑的数据都可以获取到。
现在看,我们再次谈谈一些优化。当你打开Spotify应用程序时,你会看到专辑,但你看不到专辑里面的音乐。为什么?为什么?我是指主页。你会直接看到专辑的标题。你会看到它们的封面。你会看到它们的标题。但音乐并没有加载。为什么会这样?因为你看,如果你每次都加载专辑里这么多的音乐,比如这里的音乐数据,这是一首音乐的数据,三首音乐的数据,你会在这里得到两首音乐的数据。那么问题会是什么呢?问题只是每次加载这么多数据。例如,假设在Spotify中,你的主屏幕上一次性加载了10张专辑,而这10张专辑中每张都有50首歌曲。那么你正在考虑,也就是说,大约500首歌曲的数据会一次性直接加载到你的主屏幕上。但事实并非如此。如果这么多数据一次性加载到你的主屏幕上,主屏幕可能会卡顿。可能会消耗大量的处理能力。问题就在这里,那么如何优化它呢?
那么我们可以这样优化它:我们来到`getAllAlbums`中,在`populate`部分,我们当然会保留艺术家。但我们还会在这里添加一个东西。那就是`select`。在`select`中,我们将保留标题和艺术家这两个东西。但是对于我们的音乐,我们可以在这里说`-musics`。所以音乐现在不会显示在这里。那么现在我们来运行一次看看。发送了。发送后,一个包含投影。好的。所以音乐我认为在这里不需要。好的。发送了。发送后,现在看,我的专辑中会包含标题和艺术家这两个东西。但是我的音乐不会在这里显示。
好的,那么现在我们如何获取音乐呢?为了获取音乐,我们已经开发了一个API。我们可以开发一个API,它将是`router.get('/albums/:albumId')`。根据这个专辑ID,我们可以在这里添加特定的专辑。所以`getAlbumById`。我们将再创建这个控制器。所以一个异步函数。
现在如果你注意到一件事,你会发现我们不需要编写太多的代码。也就是说,我们不需要创建太多的文件。而且我们可以快速地开发API。这就是我们遵循的文件夹结构。这个文件夹结构在开始时会花费很多时间。但是一旦你的文件夹结构设置好了,你就可以非常快速地创建API。所以这就是一个优点。所以这个文件夹结构在开始时会花费时间,但之后就不会了。所以请记住这一点。
那么专辑ID会传给我们。我们将从我们的参数中提取这个专辑ID。提取参数后,
我们在这里将填充 artist 和 username、email 以及 music。完成这些之后,我们可以说 response 或 return status album fetched successfully,并将 album 的详细信息发送给我们。
Get album by ID,我们将从这里导出它。导出后,导出后,music routes get album by ID。很好。现在,如果我回到 Postman,再次调用这个 API,我就会得到这个 album 的 ID。现在,完成这些之后,我们回到 localhost:3000/api/music/albums/album_id。现在,如果我发送它,它将是任何 album 的 ID,该 album 的 ID 将会给我,也就是说,该 album 的详细信息将全部给我。
看,album fetched successfully,album 的 ID,album 的标题,有哪些 music,以及这个 album 是哪个 artist 的,我们也能在这里知道。所以,这是我们目前为止开发的一个特定的 API。很好。
首先,我们开发了一个 API。That is this one,在这里我们可以得到所有的 music。但是现在听我说,Spotify 是一个应用程序。我们实际上并没有制作 Spotify,但我们理解它,我们正在克隆我们的 Spotify。所以,你看,当我们谈论真正的 Spotify 时,那里有数百万首歌曲。字面上数百万首歌曲。而你的 API,get all music,它做什么?它一次性获取你数据库中的所有歌曲。Find 方法做什么?Find 方法一次性获取你数据库中的所有歌曲。这是一个问题,这是一个问题。是的,绝对是。为什么?因为如果一次性加载数百万首歌曲的数据到你的服务器。即使数据库里有歌曲,它也大概是几 GB,2-3 GB 的歌曲。2-3 GB 的全部数据都会在那里。甚至可能超过 2-3 GB。但是,如果这么多的 GB 数据一次性进入服务器的 RAM,问题你知道是什么吗?服务器的 RAM 会满。它会 Out of Memory,并且服务器可能会停止接受请求。
如果你的服务器设法一次性处理了这么多的 RAM,那么你如何发送给客户端?你明白吗?要通过互联网发送 2.5 GB 或 3 GB 的数据到你的客户端。客户端的全部数据都会一次性耗尽。问题就在这里。所以我们在这里做什么?我们不会一次性获取所有数据,所有 music。我们在这里使用 limit。Limit 是什么意思?你看,我们肯定会使用 populate。同时,我们还使用其他东西。就是找到,但要有限制地找到。多少?就是一次最多只能带来 20 首歌曲。但是现在我们还没有 20 首歌曲。所以我在这里说,一次我们拥有的总 music,我们拥有的总 music,我想这里有三个。现在我设置了 limit,一次只能带来两首 music。所以,你看,如果我现在回到 Postman,我的 music API,如果我现在调用它,发送。你看,一次有多少 music 来了?总共有两首 music。那么 limit 我设置了多少?两首。
好的,如果我把它变成一首呢?那么现在这里只会有一首 music。所以你也可以在这里设置 limit。设置 limit 后,如果我在这里设置为三。你拥有的所有三个都会在这里。好的,如果我设置为十呢?我没有十首 music。仍然会是三个。为什么?因为你看,你的十是一个上限。这是一个 limit,就是最多可以有十首。这里不会超过十首。好的?
现在,比如我设置了一个 limit。再听一个方法。Skip。Skip 做什么?你在这里输入多少 skip,就会跳过多少。所以 skip,比如我在这里输入 skip。在 skip 里我输入说,跳过两首歌曲。跳过两首歌曲后,你看我们总共有多少歌曲?我们这里总共有三首歌曲。所以第一首和第二首都会被跳过,而这首歌曲会给我们。所以你看,如果我现在说,跳过第一首和第二首,而这首 title three 的 music 已经到了我们这里。同样的方式,如果我在这里 skip 一首,那么我的第一首 music 会被跳过,然后我们从这里开始计数。所以你看,skip 了一首,skip 了一首,那么第二首就会在这里。
现在,如果我在这里设置 limit 为两首。那么 skip 和 limit 在 pagination 中,这两个东西的使用非常多,skip 和 limit。所以你可以用它来实现 pagination。Pagination 是什么?评论一下,我将做一个非常详细的视频。如果你想理解 pagination,我将做一个非常详细的视频,说明 pagination 到底是什么?所以你看,我们在这里 skip 了多少?skip 了一首,limit 我们在这里设置为两首,就是一次最多可以有两首歌曲。所以,第一首会被 skip,然后紧随其后的两首我们会获取。所以你看,那两首就来了。第一首被 skip 了,接下来的两首会给我们。所以你在 Postman 里会看到,第一首没有来,第二首和第三首都正确地来了。
好的,现在如果我在这里设置为三呢?那么会发生什么?听着。如果你在这里写 skip one,那么第一首肯定会被 skip。好的。如果我在这里 skip 了全部三首呢?那么你看会发生什么?现在你这里什么都不会有,因为你有三首。你 skip 了全部三首。所以现在这里什么都不会有。这是会发生的事情。好的。如果 skip 为零呢?如果 skip 为零,那么就会 skip 零首,然后连续三首,test title one, two and three 都会在这里出现。所以它就是这样工作的。
所以,我希望我们在这里创建的这个非常小的后端项目,我们开发了许多 API,这个项目你已经理解了。如果这个项目你没有理解,那么再看一遍视频,因为这个项目很重要。听着,这个项目非常重要。如果你能创建它的前端,因为我们已经开发了 API。用这些 API 开发登录注册 API。
而且,如果你在这里需要一点点关于如何注销的信息。那么注销非常简单。只需要在 auth controller 里面,我的 auth controller,我需要在这里再开发一个特定的 controller。That is logout。所以 async function logoutUser。而在 logoutUser 中,只需要使用一个函数,response.clearCookie。而我们的 token 会从 cookie 中清除。所以你看,logoutUser,我们的 logoutUser 将从这里导出。在 auth routes 中,我们将再创建一个 router.post('/logout')。然后我们将使用 logoutUser。
所以,如果我现在看 cookies,我们有 token。我们创建一个 API。它的方法将是 post localhost:3000/api/auth/logout。现在看,现在我们的 cookies 里有 token。一旦我调用这个 API,用户将 logout successfully,同时 cookies 里的 token 也会消失。这意味着什么?就是注销。
现在听着,我刚才告诉你的这个 logout,对于初学者来说已经很好了。当进入 production level 时,我们会遵循一个概念,叫做 token blacklisting。这样,同样的 token 就不会被另一个用户在用户的名义下访问。Token blacklisting 是另一个概念。如果你想理解它,你可以评论我。它将有一个专门的视频,因为它是一个很大的主题。它涵盖了很多 edge cases,在这个视频里可能很难涵盖。所以,如果你想知道 token blacklisting 是什么,请在下面评论我,说我们想知道。我们会谈论它。
很好,我们已经注销了。然后我们开发了一些与 music routes 相关的 music API。所以这些 API 已经完成。并且我们在这里将它们的所有 controller 分开。API 将在不同的文件夹、不同的文件中创建,它们的逻辑将在不同的文件中创建。这是我们遵循的一个基本的文件夹结构,甚至是 production level 的文件夹结构。很好。
所以,至此,我们的一个项目就完成了,Spotify clone 的后端,它基本上完成了。我们还可以创建更大的,当然,我们可以使用 Redis 来优化它。在 middleware 中,我们可以添加 Redis 来进一步优化它。还有很多方法可以优化它。但是这是一个 beginner-friendly 的视频。所以,我将暂时保持这样。如果你有任何特定的需求,在这个特定的视频中,请在下面评论。我们也会谈论它。只需一直提及时间,在这个特定的部分,我们需要这个部分。在这个视频的这个特定秒,我们需要这个需求。所以,在那里评论。如果评论很多,我们再谈论。好的?
现在听着,这个项目就在这里完成了。但是还有一些 miscellaneous topics 剩下。我们要谈论它们。这项工作也会很快完成。你看到的这个代码,你可以在这个视频的描述中找到。这个代码也会在那里找到。所以,在那里看看这个代码。我想在这个项目中就到这里了。现在还有一些 miscellaneous topics 剩下,我们要谈论它们。
好了,各位,我们在这里完成了我们的项目。到目前为止,在这个视频中已经完成的内容,坦白说,已经足够了。你可以用这些东西在后端创建任何东西。现在,如果你想学习更多后端知识,想去 generative AI 领域,想去 DevOps 领域,那么我给你推荐一个资源,它的名字是什么?Code.Sharियंस 的 Code.Sharियंस 的 coder 课程,即将推出的 Codex。你可以在那里加入。我是在推广他们吗?是的,我绝对是在推广。为什么?因为它是最好的。你在行业里找不到比这更好的东西了。我会在那里。Sarthak Bhaiya 会在那里。Hars Bhaiya 会在那里,当然还有我自己。还有一些讲师会在那里。加上导师的支持。所以,所有这些东西,加上你那里能获得的价格,一个价格范围,会使整个行业中最棒的。
我在这里推广东西吗?是的,我绝对在推广。这就是我们的工作。你看,我能免费给你们的东西,我已经在这个视频里都给了。在这个视频里我已经给了。我还会提供更多与 generative AI 相关的东西,我能免费给你们的,我会再给你们。别担心,我只能免费提供这么多。不, जितना भाई देखो मुझे पता है सब लोग नहीं खरीद सकते लेकिन जितना मैं फ्री में दे सकता हूं मैं बिल्कुल प्रोवाइड करूंगा आपको इस YouTube पे लेकिन आपको अगर और भी चीजें सीखनी है तो आप हमारे कोहड हमारे जो बाकी बैचेस हैं उनमें आ सकते हो इन द एंड देखो यार यह है एक कंपनी 50 लोगों का 50 लोगों की जो फैमिली है वो इस चीज पे टिकी रहती है और यह यह जो कंपनी है शेरियंस ये कैसे कमाती है? तो उसके लिए ऑफ कोर्स हमें कोर्स बेचने पड़ते हैं। ऑफ कोर्स हम एक एजुटेक कंपनी है तो उसमें हमारे कोर्स बिकते हैं और उससे ही हमारी इनकम आती है। उससे ही हम सभी का घर चल रहा होता है। तो ऑफ कोर्स मैं चीजें जो भाई एक सिंगल सोर्स ऑफ इनकम है हमारा उसको मैं प्रमोट बिल्कुल करूंगा। बिल्कुल करूंगा। वही हमारा एक सिंगल सोर्स ऑफ इनकम है। हम नहीं ब्रांड डील्स उठाते। हम वहां पे कुछ ऐसे कोलबेशन एंड ऑल उन साइट पे अभी नहीं जाते हैं। तो एक सिंगल सोर्स ऑफ इनकम है। वही मैं आपके लिए प्रमोट करके दे रहा हूं। और ऐसा नहीं है कि खराब चीज प्रमोट कर रहा हूं। भाई बेस्ट है वो वो बेस्ट है। उससे अच्छा आपको पूरी इंडस्ट्री में कहीं नहीं मिलने वाला इसलिए बोल रहा हूं इतना। वरना इतना बोलता ही नहीं। जिस चीज को मुझे पता है कि खराब होगी। मैं उस चीज को प्रमोट करूंगा भी नहीं। ये एक चीज है। हमारी चीज वहां पे बेस्ट है इसलिए मैं प्रमोट कर रहा हूं।
现在还有一些 miscellaneous topics 剩下,我们这里还有两个主题。一个是 Jest,另一个是 Express validator。所以,我们来谈谈这两个东西。首先,我们在这里谈论 Jest。那么 Jest 是做什么用的?那么,首先,我们在这里谈论一个基本的 Express 设置。So npm init -y。这是我们的基本 Express 设置。然后 npm i express。如果我在这里输入 express,enter。安装 npm i express 后,我们的服务器,启动服务器非常简单。只需创建一个文件夹,在 src 文件夹内的 app 文件中,你可以创建它。const express = require('express'); 然后 const app = express(); 我们可以这样说。然后 module.exports = app; 我们在这里说。然后创建一个文件来启动服务器。server.js。很好。
那么 const app = require('./src/app'); 然后 app.listen(port, callback); 在 callback 中,我们可以写 server is running on this particular address。很好。现在,如果我进入 package.json 文件。进入 package.json 文件后,我可以删除这个 test 脚本。在 dev 中,我可以写 npm run nodemon server.js。然后对于 start,我可以写 node server.js。很好。那么现在,如果我在这里输入 npm run dev,那么我的服务器将在这里成功启动。
现在,我们要学习的包的名字是什么?Jest。这个包的名字是什么?Jest。Jest 是做什么用的?Jest 是用来测试你用 JavaScript 创建的任何东西,无论是用 React 创建的,还是用 Express 创建的服务器,用 JavaScript 创建的任何东西,它是否正常工作。Jest 包就是用来做这个的。现在,当我需要用 Jest 测试 Express 服务器时,我还需要一个包,它的名字是什么?Supertest。所以,我还需要这个包。所以,我们需要安装这两个包。现在,我们将安装 npm i jest。同时,还有我们的 supertest。我们将在这里安装这两个包。所以,我们将安装 jest 和 supertest。安装后,我们在这里创建一个特定的文件夹。它正在安装。很好,安装了。安装后,在 src 中,我们将创建一个特定的文件夹。_test_。或者我们可以叫它 test。然后我们在这里创建一个文件。_app.test.js。我们可以创建一个文件。在这里,我们将需要 const request = require('supertest'); 也就是说,我们如何使用 supertest。我们主要在这里讨论。所以,我们将在这里引入 supertest。引入 supertest 后,如果我们谈论 app,那么我将创建一个简单的 API。Let's say app.get('/') API。然后在 callback 中,我们现在不会深入 production level。Production level 我已经在视频中告诉你了。所以,你可以看看它。然后 response.send 中,我们可以写一点点。response.status(200)。然后以 JSON 格式。以 JSON 格式发送一个 message。Hello world。很好。
所以,创建了一个 API。现在听着,Jest 是做什么用的?Jest 是用来测试你开发的任何 API 是否发送了正确的 response。Jest 就是用来测试这个的。现在,怎么做呢?那么,我在这里说,describe。Describe 可以在这里写。或者首先,我们需要 const app。那么,require,然后我们将在这里说,app 文件,app.js 文件,把它 require 进来。现在,在 describe 中,我将说,我们通常在这里写要测试的 API 的名字。然后,这里有一个 callback。在这个 callback 中,我们将写不同的 test cases。比如,这个 '/' API,当我请求它时,状态码应该返回什么?200。并且以 JSON 格式,在 body 中,message 里面,我应该得到 Hello world。所以,我在这里会写,it。It should return status code 200 OK。同时,现在你看,我在这里会写什么?在这个地方,我会说,const response。那么,在 it 中,我们将使用我们引入的 request。所以,request。然后,我们将用我们 app 的实例来做 request。你看,这个 app 是从哪里来的?这个 app 是我们的 Express 服务器的实例。所以,这个 app 从这里来。所以,app 从这里来。在这个 app 上。
我们使用 GET 方法,在我们的斜杠 API 上发起了请求。请求之后,我们期望的响应是什么呢?我们期望响应的状态码是 200。同时,响应体应该是一个对象,对象里面应该有一个消息 "Hello World"。
我们就这样写了一个测试用例。现在,你看,做到这一步。做到这一步之后,如果我在这里运行 `npx jest`,那么我的测试用例就会在这里运行。
你看,测试用例在这里运行了。它们是如何运行的呢?我来告诉你。我们创建了一个测试用例,它的名字是什么?`GET /`。意思是,GET 方法的斜杠 API,我们在这里运行测试。并且,这个测试用例是这样的:如果我直接在这里发起请求,也就是说,我没有对它做任何修改。简单地发送请求,那么状态码应该返回 200。
所以,它显示 "Should return 200 OK"。这个测试用例是正确通过的。它花了多少时间?花了 27 毫秒。测试套件在这里成功通过了。很好,并且测试中有一个测试用例通过了。
好的,如果你在这里写了测试用例。在测试用例中,你说了什么?如果我在斜杠 API 上发起请求,状态码应该返回 200,并且消息应该返回 "Hello World"。
好的,如果由于任何原因,比如说服务器宕机了。服务器因为任何原因无法启动,并且状态码返回了 500。那么,你看,现在如果我在这里运行 `npx jest`,那么现在你看,状态码会是什么呢?你创建的那个应该返回 200 状态码的测试用例,它现在失败了。
它失败的原因是:期望的状态码是 200,但收到的却是 500。并且是在第 10 行,你在这里精确地写了这个测试用例,所以它失败了。所以,我们只是用它来测试我们的 API。这只是一个非常基础的用例。我们通常在更高的层面上使用它。
除了这个之外,我们还可以实现一个东西,什么呢?你看,你看,我们在这里还需要实现一个东西。所以,测试我们已经写好了。在 `app.js` 文件中,我正在创建一个 API。`app.post('/register')`。当然,我们没有遵循标准的文件夹结构。但你可以认为,这只是为了测试,只是为了看看 `express-validator` 是用来做什么的。所以,为了快速,我们在这里实现它。
现在,你看,在 `/register` API 上,会有一个用户过来,他会有 `request.body.username`,`request.body.email`,以及 `request.body.password`。所以,这两样东西都会有。`request.body` 中会有所有这些东西。
现在,到目前为止,我们还在做什么?我们还没有验证这些东西。`username`、`email` 和 `password`。我们还没有验证这些。那么,为了验证,我们有一个包。这个包的名字是什么?`express-validator`。所以,我们在这里会来。安装一个包。`npm install express-validator`。回车。
回车之后,我们在这里如何设置 `express-validator` 呢?`express-validator` 作为中间件来设置。所以,我们在 `middlewares` 文件夹里面创建一个文件夹。文件夹的名字是 `validation.middleware.js`。好的?所以,我们将设置 `validation.middleware`。首先,我们需要两样东西。从哪里?从我们的 `express-validator`。所以,`require('express-validator')`。
你在这里可以看到,`request.body`、`request` 中有三种数据可以进来。在哪里?数据可以进入 `body`。所以,我们可以验证 `body`。数据可以进入 `params`。我们可以验证 `params`。同时,数据可以进入 `query`。所以,我们也可以验证 `query`。
所以,无论你有什么样的数据进来,并且你不知道数据是进入哪个里面的。那么,我想你在这里可以使用 `all` 或者 `checkCookie`。我想你有一个 `check`。这个 `check` 是用来检查一个或多个字段的。你可以使用其中任何一个。`headers`、`cookies`。你可以使用 `check`。如果你不知道数据会进入哪个里面,那么你可以使用 `check`。但我们不使用 `check`。我们想要具体地知道数据会进入 `body`。所以,我们会使用 `body`。
你还需要一样东西,我们称之为 `validationResult`。你可以在这里导入这两样东西。导入之后,现在你看,在 `app.js` 文件中,我正在创建的 `/register` API。我需要验证这个东西。我需要验证什么呢?进入的数据,`username`、`email` 和 `password`。所有这些东西。所以,我需要验证所有这些东西。
`username` 会是什么?`username` 是一个字符串,并且它的长度是固定的。大概是这样,最小长度是 3,最大长度可以是,比如说 20 个字符。所以,我需要在这里验证同样的东西。如何做呢?
所以,你看,你可以在这里创建一个特定的验证,或者说,创建 `registerUserValidationRules`。这将是一个数组。在这个数组里面,你首先会验证 `username`。所以,在 `body` 中,你会在这里验证 `username`。并且在验证里面,你会检查 `isString()`。所以,你首先会检查进入 `body` 的 `username` 是否是字符串。如果它不是字符串,那么你会向请求添加一个错误,并且那个错误的提示信息是什么呢?那个错误的提示信息是 "Username must be string"。
你还会检查 `isLength()`。`username` 的长度应该是最小 3 个字符,并且最多可以是 20 个字符。并且,如果你的 `username` 的长度小于最小 3 个字符,或者大于最大 20 个字符,那么你会在这里输入 "Username must be between 3 and 20 characters"。
我想,`username` 的验证就这些了。现在听我说。这里可能存在两种情况。就是说,从前端传过来的 `username`,要么满足所有这些条件。也就是说,它是一个字符串,并且它小于最小 3 个字符,小于最大 20 个字符。它可能满足所有这些条件。
如果它不是字符串,或者它的长度小于最小 3 个字符,或者大于最大 20 个字符,那么这里就会添加一个错误。那么,为了处理这个即将添加的错误,我们再创建一个函数。
所以,我们可以保存一个异步函数 `validateResult`。`validateResult`。`validateResult` 将是一个中间件。`validateResult` 将是一个中间件。并且在这个中间件里面,你看,我会告诉你。我马上就会告诉你所有事情都会清楚。我怎么说呢?先写代码。我们先在这里写代码。然后我再解释给你听。
你看,我们在这里创建了 `registerUserValidationRules`。我们在这里验证了 `username`。检查它是否是字符串。它的最小长度是 3,最大长度是 20 个字符。我们检查了这些。并且在检查完这些之后,我们在这里调用 `validationResult`。
那么,你看,会发生什么呢?你创建的这个函数 `validateResult`。你把它放在最后调用。那么,会发生什么呢?
现在听我说。会发生什么呢?你看,你在这里验证了 `username`。验证 `username` 之后,检查它是否是字符串。如果 `username` 不是字符串,那么这里就会有一个错误信息:"Username must be a string"。如果它不是字符串,那么这个错误就会在这里发送。如果长度小于 3 或大于 20,那么这里又会有一个消息。
那么,你看,这里可能存在两种情况。要么所有这些验证结果都通过。要么其中一个失败。或者所有都失败。这些情况都可能发生。那么,如果这些验证中的任何一个失败了,它就会存储在 `request` 中。我们在 `request` 中检查 `validationResult`,看看是否有任何验证规则在这里失败。如果任何一个失败,它就会进入 `errors`。并且 `errors` 不会是空的。如果 `errors` 不是空的,这意味着有验证规则失败了。并且我们将它作为一个数组返回给响应。
那么,你看,你传递了这个 `validationResult`。现在听我说。就像我们对 `username` 所做的那样,我们在这里对 `body.email` 做同样的事情。检查 `email`。然后我们在这里对 `password` 做同样的事情。所以,在 `express-validator` 中,你可以非常容易地执行验证。这就是为什么它被使用。
所以,我们传递了 `username`。检查 `username` 是否是字符串。它的最小长度是 3,最大长度是 20。我们检查了这些。对于 `email`,我们检查进入 `body` 的 `email` 属性是否是一个有效的 `email`。我们也检查了。然后是 `password`,它应该是最小 6 个字符。我们也在这里检查了。
最后,如果任何验证结果失败,那么它就会进入 `validationResult`。并且如果任何一个验证结果失败,它就会成为 `errors` 的一部分。并且我们会在这里返回所有失败的内容。如果没有任何失败,那么我们就简单地调用 `next()`。
那么,你看,这个 `registerUserValidationRules`,我们会在这里导出它。`module.exports = registerUserValidationRules`。我们在这里导出它。
回到 `app.js` 文件。我们将在这里导入 `validationRules`。`require('./middlewares/validation.middleware')`。导入之后,在 `validationRules` 中,我们在这里导入 `registerUserValidation`。然后,我们将它作为中间件使用。
然后,你看,现在如果我在这里运行 `npm run dev`。运行之后,如果我向这个 API 发送任何请求,你看会发生什么。首先,这是一个模拟 API,所以我们可以直接返回响应。`res.status(200).json({ message: 'User registered successfully', user: userDetails })`。
那么,现在如果我打开 Postman。打开 Postman 后,一个新的 API。方法是 POST。`localhost:3000/register`。在 `body` 中。我可以在这里选择 `raw` 格式。然后我说 `username`。你看,现在我在这里输入的 `username` 是一个无效的 `username`。
在这个地方,我输入的 `email`,我的 `email` 是 `test`。这也是一个无效的 `email`。同时,我的 `password` 是这样的。这个 `password` 也不满足最小 6 个字符的要求。所以,我刚才在 `request.body` 中输入的所有数据都是无效的。
那么,你看,现在如果我发送这些数据,会发生什么呢?我会收到一个 400 Bad Request。因为你提供的数据是错误的。无效数据。
在 `errors` 中,我有什么呢?`type: 'field'`, `message: 'Username must be a string'`。`location: 'body'`。`body` 中的 `username` 属性应该是字符串类型。同样,`body` 中的 `username`,它的最小长度是 3,最大长度是 20 个字符。无效的 `email`。密码必须是 6 个字符长。所有这些东西都进来了。
并且这些是如何进来的呢?这是通过 `express-validator` 进来的。
那么,如果我在这里删除了这个中间件,删除了 `express-validator`。那么,在没有验证的情况下,你会在这里创建东西。现在,这里是 `undefined`。所以,我们在这里需要使用 `express.json()`。
现在,如果我发送它,你看,在没有验证的情况下,你会创建一个用户。如果你不使用 `express-validator`。并且如果我们的 `express-validator` 在这里生效。那么,我们可以说,在 `validationRules` 中,`registerUserValidationRules`。现在,如果我在这里使用它,那么如果你的数据是无效的,用户就无法创建。用户就无法注册。
现在,如果我在这里输入一个正确的测试。我在这里提供一个正确的 `test` `email`,`test@test.com`。并且 `password` 是 `123456`。那么,现在这是一个有效的 `data`。所有这些数据都是有效的。那么,如果数据是有效的,我们的用户就可以创建了。
但是,如果其中任何一个无效。比如说,这个 `email` 现在是无效的。那么,你看,这里会发生什么呢?这里会收到一个 400 Bad Request。`email` 是无效的 `email`。它在这里出现了。
所以,我们使用 `express-validator` 来检查从前端传过来的数据是否正确。检查它的格式是否正确。验证它。
所以,我们在这里还剩下一些杂项主题。哪些呢?我们的 `express-validator` 和 `jest`。这两个主题都还剩下。它们属于杂项主题。但在生产环境中,它们的使用非常广泛。所以,我觉得你至少应该知道它们。
还有其他主题。但要全部涵盖在这里会有点困难。所以,在这个视频中,我们就到这里。我在这期视频中讲的后端内容,可以说是非常足够了。比足够还要多。你可以创建任何应用程序。我可以说,这期视频讲的后端内容非常足够。你可以创建任何应用程序。并且,加上一个标准的文件夹结构,你就可以在生产级别上创建任何应用程序。
还有很多主题。如果你想学习,可以评论。我们也会制作相关视频。接下来的几个视频将与生成 API 相关。所以,请耐心等待。关注频道。关于生成 API 的主题也很快会在这里出现。
所以,这个视频就到这里。我们就到这里。在接下来的视频中再见。拜拜。