设置项目
(请随意编写代码或从 GitHub 存储库上下载完整代码。)
MERN 支持创建全栈解决方案。因此,为了充分发挥它的潜力,我们将创建一个 MERN 堆栈项目。在此项目中,我们将同时创建前端和后端。前端将使用 React 来实现,而后端将使用 MongoDB、Node.js 和 Express 来实现。我们将前端称为客户端 (client),后端称为服务器 (server)。
让我们先来创建一个空目录:mern。此文件夹将包含我们的客户端和服务器文件夹。
接下来,为后端创建一个文件夹,将其命名为“server”。然后,我们将使用 npm init 对 package.json 文件进行初始化。
为了使用 ECMAScript 模块(打包 JavaScript 代码以供重用的官方标准格式),我们将在 package.json 文件中添加一行。
我们还将安装各种依赖项。
上述命令会安装三个不同的包:
- mongodb — MongoDB 数据库驱动程序,其允许 Node.js 应用程序连接到数据库并处理数据
- express — Node.js 的 Web 框架(可让我们的生活更轻松)
- cors — 支持跨源资源共享的 Node.js 包
我们可以在 package.json 文件中查看已安装的依赖项。该文件应列出各个包及其版本。
在确保依赖项安装成功后,我们会创建一个名为 server.js 的文件,其中包含以下代码:
mern/server/server.js
在这个文件中,我们会导入要使用的 express 和 cors。const port = process.env.PORT 将从我们接下来要创建的 config.env 中访问 port 变量。
连接到 MongoDB Atlas
现在可以将我们的服务器连接到数据库了。我们将使用 MongoDB Atlas 作为数据库。MongoDB Atlas 是一种基于云的数据库服务,可提供强大的数据安全性和可靠性。MongoDB Atlas 提供永不过期的免费集群,并允许您访问部分 Atlas 特性和功能。
参照 Atlas 入门指南创建帐户,部署第一个集群,然后找到集群的连接字符串。
找到连接字符串后,返回 server 目录,然后创建 config.env 文件。在该文件中,将连接字符串赋值给新的 ATLAS_URI 变量。完成后,您的文件应如下所示。用您的数据库用户名、密码、集群名称和项目 ID 替换 < username >、< password >、< clusterName > 和 < projectId >。
mern/server/config.env
在 server 目录下创建一个名为 db 的文件夹,然后在文件夹中创建一个名为 connection.js 的文件。在该文件中,我们可以添加以下代码来连接我们的数据库:
mern/server/db/connection.js
服务器 API 端点
数据库和服务器已经配置完毕。现在轮到 API 端点了。让我们先来创建一个 routes 文件夹,在其中添加 record.js。返回您的“server”目录,然后创建新的目录和文件:
routes/record.js 文件中还将包含以下几行代码:
mern/server/routes/record.js
如果此时运行应用程序,终端将在连接建立后显示以下信息。请注意,我们使用的是最新版 Node.js 的内置环境变量功能。
关于后端的内容就介绍到这里。现在,我们将开始配置前端。
设置 React 应用程序
对于前端,我们将使用现代的 React 应用程序创建方法 Vite。在 mern 目录下的新终端中,我们来进行如下设置:
在我们的项目中还会用到一些其他依赖项。我们先来使用 Tailwind CSS。
接下来,我们将编辑 tailwind.config.js 文件中的 content 字段。
在 src/index.css 文件中,我们需要添加 Tailwind 指令,并删除所有其他指令。
最后,我们将安装 react-router-dom。
Tailwind 是一套实用型 CSS 框架,允许您使用预定义类名称来添加 CSS 样式。而 React Router 会为 React 添加客户端页面路由。
设置 React Router
在 src/main.jsx 中,我们将添加以下代码:
mern/client/src/main.jsx
我们在 router 变量中设置了应用程序页面路由,并使用了 RouterProvider 让用户界面与 URL 保持同步。RouterProvider 有助于实现组件之间的无缝切换。基本上,它只会重新加载或刷新需要更改的组件,而不会刷新或重新加载整个页面。虽然 React Router 并非必须设置,但如果您希望应用能够快速响应,配置它就很重要了。
创建组件
接下来,我们来创建之前在路由中定义的各个组件。在 src 文件夹内创建一个 components 文件夹。对于我们创建的每个组件,我们都将在 components 文件夹内创建一个新的 .js 文件。在本例中,我们将添加 Navbar.jsx、RecordList.jsx 以及 ModifyRecord.jsx。
下方快照显示了每个文件的外观。
Navbar.jsx
在 navbar.js 组件中,我们将使用以下代码创建一个导航栏,将我们链接到所需的组件。
mern/client/src/components/navbar.jsx
RecordList.jsx
以下代码将作为查看记录的组件,它将通过 GET 方法获取我们数据库中的所有记录。
mern/client/src/components/RecordList.jsx
Record.jsx
以下代码将作为表单组件来创建或更新记录。该组件将向我们的服务器提交 create 命令或 update 命令。
mern/client/src/components/Record.jsx*
现在,我们将以下内容添加到 src/App.jsx 文件中。
mern/client/src/App.jsx
这是我们的主要布局组件。我们的 Navbar 将始终位于每个页面的顶部,Outlet 将接受我们之前在 main.jsx 文件的 routes 中定义的子组件。
将前端连接到后端
我们已经完成了组件的创建过程。我们还使用了 fetch(其提供了更直观、更简单的方式来处理 HTTP 请求)将我们的 React 应用连接到后端。在 Record.jsx 中,我们在 onSubmit(e) 代码块后面加上了以下代码。当系统向 URL 发送一条 POST 或 PATCH 请求时,fetch 会向数据库添加一条新记录或更新数据库中的现有记录。
我们还将在 Record.jsx 中加入以下代码块,放在构造代码块的下方,以便在有现成记录时,加载该记录。
最后我们来配置 RecordList.jsx。RecordList.jsx 会从数据库中获取记录,因此我们将使用 fetch 的 GET 方法从数据库中获取记录。为此,我们在 RecordList.jsx 中的 RecordList() 函数上方添加了以下几行代码。
关闭所有文件后,若要启动应用,请按照以下步骤操作:
- 请确保服务器应用仍在运行。如果该应用未运行,请在 server 目录中执行以下命令来启动它:
- 在新终端中,转到 client 目录,然后运行以下命令:
这是我们通过“创建员工”按钮为“Jesse Hall”、“Kushagra Kesav”和“Stanimira Vlaeva”添加记录后,record 组件登陆页面将呈现的外观。
以下展示了添加员工屏幕:
恭喜您构建完您的第一个 MERN 应用程序。如需了解更多想法和高级概念,请访问我们的开发者中心。如果您有任何问题,请在我们的社区论坛上发帖提问。