介绍
Mongoose是操纵 Node.js 和 MongoDB 后端数据的基本工具之一。
在本文中,您将研究使用 Mongoose 与 MongoDB Atlas 远程数据库。本教程中的示例将包括食物和其卡路里值的列表。
前提条件
您可以参阅 Express 上这篇文章和 官方Express 文档。
- 您可以参阅 Express 上的这篇文章和 Async 和 Wait 上的这篇文章.
下载和安装一个工具,如 邮件人建议测试API终端。
本教程已通过 Node v15.3.0、npm v7.4.0、express v4.17.1、mongoose v5.11.12 和 MongoDB v4.2 进行验证。
MongoDB Atlas 设置
此项目还需要一个 MongoDB Atlas帐户。
在创建一个帐户并登录后, 遵循这些步骤来部署免费级别集群)。
一旦您设置了一个集群、一个数据库用户和一个 IP 地址,您将准备在您设置项目的其余部分时稍后获得连接字符串。
步骤1 - 设置项目
在本节中,您将为您的项目创建一个目录并安装依赖性。
为您的项目创建一个新目录:
1mkdir mongoose-mongodb-atlas-example
导航到新创建的目录:
1cd mongoose-mongodb-atlas-example
在此时刻,您可以启动一个新的 npm 项目:
1npm init -y
接下来,安装express
和mongoose
:
1npm install [email protected] [email protected]
在这一点上,你将有一个新的项目快递
和蒙古人
。
步骤二:设置服务器
在本节中,您将创建一个新的文件来运行 Express 服务器,连接到 MongoDB Atlas 数据库,并导入未来的路线。
创建一个新的 server.js
文件并添加以下代码行:
1[label server.js]
2const express = require("express");
3const mongoose = require("mongoose");
4const foodRouter = require("./routes/foodRoutes.js");
5
6const app = express();
7
8app.use(express.json());
9
10mongoose.connect(
11 "mongodb+srv://madmin:<password>@clustername.mongodb.net/<dbname>?retryWrites=true&w=majority",
12 {
13 useNewUrlParser: true,
14 useFindAndModify: false,
15 useUnifiedTopology: true
16 }
17);
18
19app.use(foodRouter);
20
21app.listen(3000, () => {
22 console.log("Server is running...");
23});
请注意连接字符串,这是 MongoDB Atlas 提供的连接字符串,您需要将管理员帐户(‘madmin’)、密码、集群名称(‘clustername’)和数据库名称(‘dbname’)替换成与集群相关的值:
1mongodb+srv://madmin:<password>@clustername.mongodb.net/<dbname>?retryWrites=true&w=majority
mongoose.connect()
将采用连接字符串和配置选项对象. 对于本教程的目的, useNewUrlParser
、 useFindAndModify
和 useUnifiedTopology
配置设置是必要的 避免减肥警告。
在这一点上,你有一个快递服务器的开始,然后你需要定义方案和处理路线。
步骤三:构建计划
首先,您需要有一个模式来构建您的数据,这些模式被称为方案. 方案允许您准确地决定您想要的数据以及您希望数据作为对象具有哪些选项。
在本教程中,您将使用mongoose.model
方法使其与实际数据可用,并将其导出为您可以在foodRoutes.js
中使用的变量。
创建一个新的模型
目录:
1mkdir models
在这个新目录中,创建一个新的 food.js
文件,并添加以下代码行:
1[label ./models/food.js]
2const mongoose = require("mongoose");
3
4const FoodSchema = new mongoose.Schema({
5 name: {
6 type: String,
7 required: true,
8 trim: true,
9 lowercase: true,
10 },
11 calories: {
12 type: Number,
13 default: 0,
14 validate(value) {
15 if (value < 0) throw new Error("Negative calories aren't real.");
16 },
17 },
18});
19
20const Food = mongoose.model("Food", FoodSchema);
21
22module.exports = Food;
此代码定义你的FoodSchema
。它将由一个名称
值组成,类型为字符串
,它将是必需的
,清理
任何白色空间,并设置为下方
字符。它还将由一个卡路里
值组成,类型为数字
,它将具有0的默认
和验证
,以确保不会提交负数。
步骤4 – 构建阅读路径
一旦设置了数据模型,您可以开始设置路径来使用它,这将使用各种 通过 Mongoose 可用的查询函数。
您将通过阅读数据库中的所有食物开始,在此时,它将是一个空的数组。
创建一个新的路线
目录:
1mkdir routes
在这个新目录中,创建一个新的 foodRoutes.js
文件,并添加以下代码行:
1[label ./routes/foodRoutes.js]
2const express = require("express");
3const foodModel = require("../models/food");
4const app = express();
5
6app.get("/foods", async (request, response) => {
7 const foods = await foodModel.find({});
8
9 try {
10 response.send(foods);
11 } catch (error) {
12 response.status(500).send(error);
13 }
14});
15
16module.exports = app;
此代码为 GET 请求建立一个 /foods' 终端点(请注意数值)。 蒙古式查询函数
find()` 返回所有具有匹配参数的对象. 由于没有提供参数,它会返回数据库中的所有项目。
由于Mongoose函数是无同步的,你会使用async/await
。一旦你有数据,这个代码使用一个试试捕
块来发送它。
导航到您的项目目录的根部,并在您的终端中使用以下命令运行您的Express服务器:
1node server.js
在 Postman 中,创建一个新的 Read All Food请求,确保请求类型设置为GET
。
<$>[注] 注:如果您需要帮助导航邮政员接口的请求,请参阅 官方文档。
邮件员结果将显示一个空数组。
步骤5 - 构建创建路径
接下来,您将构建创建新食品项目的功能,并将其保存到数据库中。
查看foodRoutes.js
文件并在app.get
和module.exports
之间添加以下代码行:
1[label ./routes/foodRoutes.js]
2// ...
3
4app.post("/food", async (request, response) => {
5 const food = new foodModel(request.body);
6
7 try {
8 await food.save();
9 response.send(food);
10 } catch (error) {
11 response.status(500).send(error);
12 }
13});
14
15// ...
此代码为 POST 请求建立一个 /food
终端点. Mongoose 查询函数 .save()
用于保存传送到数据库的数据。
在邮件
中,创建一个名为创建新食物
的新请求,确保请求类型设置为POST
。
在身体
部分中,选择原料
和JSON
然后通过构建一个具有名称
和卡路里
的JSON对象来添加一个新的食物项目:
1{
2 "name": "cotton candy",
3 "calories": 100
4}
发送创建新食物
请求后,再发送阅读所有食物
请求,邮件员结果将显示新添加的对象。
步骤 6 – 构建更新路径
使用 Mongoose 创建的每个对象都有自己的 _id
,您可以使用它来瞄准特定项目. 它将是字母字符和字母的组合。
接下来,您将构建更新现有食品项目的功能,并将更改保存到数据库中。
检查foodRoutes.js
文件并在app.post
和module.exports
之间添加以下代码行:
1[label ./routes/foodRoutes.js]
2// ...
3
4app.patch("/food/:id", async (request, response) => {
5 try {
6 await foodModel.findByIdAndUpdate(request.params.id, request.body);
7 await foodModel.save();
8 response.send(food);
9 } catch (error) {
10 response.status(500).send(error);
11 }
12});
13
14// ...
此代码为 PATCH 请求建立一个 /food/:id
终端点. Mongoose 查询函数 .findByIdAndUpdate()
接收目标的 id
和您想要替代的请求数据。
在 Postman 中,创建一个名为更新食物
的新请求,确保请求类型设置为PATCH
。
在身体
部分中,选择原料
和JSON
。然后,通过构建一个具有名称
和卡路里
的JSON对象来修改你的食品项目:
1{
2 "calories": "999"
3}
在发送更新食物
请求后,请再次发送阅读所有食物
请求,邮递员的结果将显示对象的修改卡路里
。
步骤7 - 构建删除路径
最后,您将构建功能来删除现有食品项目并将更改保存到数据库中。
检查foodRoutes.js
文件并在app.patch
和module.exports
之间添加以下代码行:
1[label ./routes/foodRoutes.js]
2// ...
3
4app.delete("/food/:id", async (request, response) => {
5 try {
6 const food = await foodModel.findByIdAndDelete(request.params.id);
7
8 if (!food) response.status(404).send("No item found");
9 response.status(200).send();
10 } catch (error) {
11 response.status(500).send(error);
12 }
13});
14
15// ...
此代码为 DELETE 请求建立一个 /food/:id
终端点. Mongoose 查询函数 .findByIdAndDelete()
接收目标的 id
并删除它。
在 Postman 中,创建一个名为删除食物
的新请求,确保请求类型设置为删除
。
在发送删除食物
请求后,请再次发送阅读所有食物
请求。
<$>[注] 注: 现在你已经完成了这个教程,你可能想要 Terminate任何你不再使用的MongoDB Atlas集群。
此时,您有一个 Express 服务器,使用 Mongoose 方法与 MongoDB Atlas 集群进行交互。
结论
在本文中,您了解了如何使用Mongoose方法,您可以快速创建和管理您的后端数据。
如果您想了解有关 Node.js 的更多信息,请参阅 我们的 Node.js 主题页面以获取练习和编程项目。
如果您想了解更多关于 MongoDB 的信息,请查看 我们的 MongoDB 主题页面以获取练习和编程项目。