介绍
MongoDB 是最流行的 NoSQL 数据库——它以集合的形式存储数据。集合中的各个记录称为文档,其键值结构类似于 JSON 数据。MongoDB 因其高性能、灵活性和可扩展性而备受青睐。.
什么是獴?
Mongoose 是一个基于 Promise 的对象数据建模 (ODM) 库,适用于 Node.js 框架。Mongoose 简化了您与 MongoDB 数据库的交互方式。它允许您创建和建模 MongoDB 模式,从而避免编写复杂的数据库查询/模式。Mongoose 使您能够对要存储在 MongoDB 中的数据进行建模。.
本指南将帮助您了解如何使用 Mongoose 将 MongoDB 连接到 Node.js。.
先决条件:
要遵循本指南,请确保您的计算机上已安装 Node.js。MongoDB 已安装在您的计算机上,或者已在 MongoDB Atlas 云帐户上设置。您需要具备创建 Node.js 服务器的基本知识。Postman 也已安装。设置 Node.js Mongoose 项目:要创建 Node.js 项目,请转到所需的文件夹并运行 `npm init -y`。然后安装以下软件包:Express — 用于创建 Node.js HTTP 服务器。Mongoose — 用于在 Node.js 中管理 MongoDB 的 ODM(对象交付模块)。.
npm install mongoose --save
在Node.js中使用Mongoose和MongoDB进行通信 要使用Mongoose与Mongoose通信,请创建一个名为db.js的文件,并按如下方式配置Mongoose连接:
导入 Mongoose 库:
const connectDB = async () => {
try {
const conn = await mongoose.connect(`mongodb://localhost:27017/test`, {
useNewUrlParser: true,
});
console.log(`MongoDB Connected: {conn.connection.host}`);
} catch (error) {
console.error(error.message);
process.exit(1);
}
}这里使用的 MongoDB 运行在本地。因此,Mongoose 会创建一个连接到 `<database_name>`,其中 `<database_name>` 是您的数据库名称。请确保输入正确的 URI,该 URI 连接到您的本地 MongoDB 安装或 MongoDB Atlas cloud.mongodb://localhost:27017test。.
最后,导出 connectDB 函数:
module.exports = connectDB;导入 db.js 文件:
const express = require('express');
const connectDB = require('./db'); 添加 Express 中间件和解析器:
// express
const app = express();
//body parser
app.use(express.json());运行 connectDB() 函数:
//connect to database
connectDB();添加服务器根目录:
// routes
// We will add these routes later in this guide.在本地主机端口上运行程序:
onst PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server running on port {PORT}`));使用 Mongoose 对 Schema 进行建模
模型定义了 MongoDB 数据库中的集合模式。请按如下方式创建 model.js 文件和 Mongoose 集合模式:
const {
Schema,
model
} = require("mongoose");
const MySchema = new Schema({
name: {
type: String,
required: true,
maxlength: 50
},
createdAt: {
type: Date,
default: Date.now,
},
});
const TaskModel = model("test", MySchema)
module.exports = TaskModel这里,我们创建一个名为 MySchema 的函数,它会执行 mongoose.Schema 方法。此方法用于设置 Mongoose 在 MongoDB 上运行的模式。要创建模式,请将文件添加到您的文档中。在本例中,我们添加两个字段:
名称 – 在上面的代码中,该字段被创建为一个长度不超过五十个字符的字符串。必填项设置为 true,表示每个文档都必须包含此字段。
createAt 字段——指定文档的创建时间。默认情况下,创建日期类型为当前日期。.
使用 Mongoose schema 向数据库添加数据:
要向数据库添加数据,请创建一个 controller.js 文件。.
从模型文件中导入 MySchema const Task = require('./model');
向任务集中添加任务。这将指定 POST 路径。.
exports.createTask = async (req, res) => {
try {
// get the task from the body
const taskData = await req.body;
//create a new task then save
await Task.create(taskData)
.then((createdTask) => {
if (!createdTask) return res.status(404)
.json({
success: false,
message: "Task creation failed",
error: "Unable get created task"
})
res.status(201)
.json({
success: true,
createdTask
})
})
.catch((error) => {
res.status(404)
.json({
success: false,
error: error.message
})
})
} catch (error) {
res.status(500)
.json({
success: false,
message: "Internal server error"
})
}
}恢复所有任务:
将此代码添加到 controller.js 文件中。这将指定 GET 路由。.
exports.createTask = async (req, res) => {
try {
// get the task from the body
const taskData = await req.body;
//create a new task then save
await Task.create(taskData)
.then((createdTask) => {
if (!createdTask) return res.status(404)
.json({
success: false,
message: "Task creation failed",
error: "Unable get created task"
})
res.status(201)
.json({
success: true,
createdTask
})
})
.catch((error) => {
res.status(404)
.json({
success: false,
error: error.message
})
})
} catch (error) {
res.status(500)
.json({
success: false,
message: "Internal server error"
})
}
}
exports.getTasks = async (req, res) => {
//get all the data in the model and return it as response
try {
Task.find()
.then((allTasks) => {
res.status(200)
.json({
success: true,
allTasks
})
})
.catch((error) => {
res.status(404)
.json({
success: false,
message: "Cant fined ",
error
})
})
} catch (error) {
res.status(500)
.json({
success: false,
message: "Internal server error",
error: error.message
})
}
}创建路由:
创建一条路由来运行上述控制器。创建一个名为 routes.js 的新文件,并添加以下代码:
const router = require("express")
.Router()
const controller = require('./controller')
router
.post('/', controller.createTask)
.get('/', controller.getTasks)
module.exports = router最后,在 server.js 文件中运行这些路由。.
const router = require('./routes')
app.use('/tasks', router)要添加新任务,请使用 Postman 发送 POST 请求,如下所示:
要检索已添加的任务,请使用 Postman 发送如下 GET 请求:
您可以通过访问 MongoDB 数据库来查看新增的任务:












