如何使用Node.js创建一个Mongoose数据处理的模块
【摘要】 对于一个用户模型,可以定义用户名、邮箱、密码等字段及其类型(如字符串、数字等)。这使得数据的存储和操作更加规范,避免了数据的随意性和混乱。比如,在没有使用 Mongoose 的情况下,可能会在数据库中存储各种格式不一致的用户数据,而使用 Mongoose 后,所有用户数据都必须符合预定义的 Schema 结构,保证了数据的一致性。
前言
对于一个用户模型,可以定义用户名、邮箱、密码等字段及其类型(如字符串、数字等)。这使得数据的存储和操作更加规范,避免了数据的随意性和混乱。比如,在没有使用 Mongoose 的情况下,可能会在数据库中存储各种格式不一致的用户数据,而使用 Mongoose 后,所有用户数据都必须符合预定义的 Schema 结构,保证了数据的一致性。
一、使用 Mongoose
相比直接使用 MongoDB
的好处
1、提供结构化的数据模型:
-
定义数据结构:
Mongoose
通过Schema
定义数据结构,包括数据类型、默认值、验证器等。这使得数据存储更加规范,避免了数据的随意性和混乱。 -
数据验证:同时
Mongoose
内置了丰富的数据验证功能,可以确保数据在保存到数据库前符合预期格式。支持多种基本类型验证以及自定义验证器,减少了无效数据存储的风险,提高了数据质量。
2、简化数据库操作
-
封装操作方法:Mongoose 提供了简洁易用的方法来封装常见的数据库操作,如
find()、save()、findByIdAndUpdate()、findByIdAndDelete()
等。这些方法使得开发者无需编写复杂的原生MongoDB
查询语句,降低了开发难度。 -
链式调用和查询构建器:支持链式调用和查询构建器,可以灵活地构建复杂的查询条件。比如可以轻松实现按条件查询、排序、限制结果数量等操作,代码更加简洁、易读。
3、支持异步操作
- Promise 支持:
Mongoose
的操作方法返回Promise
对象,方便使用async/await
语法进行异步操作。避免了回调地狱问题,提高了代码的可维护性。 - 错误处理: 使用
async/await
时,可以通过try/catch
语句块集中处理错误,统一返回错误信息。
二、如何使用Mongoose
创建一个数据处理模块
1、 安装 Mongoose
在 Node.js 项目中,首先需要安装Mongoose
。打开终端
npm install mongoose
2、创建一个main.js
数据处理模块
- 定义一个异步函数 main
用于连接到 MongoDB
数据库,新建model/index.js
const mongoose = require("mongoose");
async function main() {
await mongoose.connect("mongodb://127.0.0.1:27017/express-template");
}
- 调用 main 函数,并处理其返回的
Promise
main()
.then((res) => {
console.log("数据库连接成功");
})
.catch((err) => {
console.log("数据库连接失败");
});
- 定义一个 users 模型的
Schema
Schema
是 Mongoose
中定义文档结构的方式。在model/index.js
中定义 Schema
const users = new mongoose.Schema({
username: {
type: String,
required: true,
},
age: {
type: Number,
required: true,
},
});
- 使用
Schema
创建一个 User 模型
const userModel = mongoose.model("User", users);
- 创建一个新的
User
实例
const user1 = new userModel({ username: "xiaoyi", age: 20 });
- 保存 User 实例到数据库
user1.save();
- 完整
main.js
const mongoose = require("mongoose");
async function main() {
await mongoose.connect("mongodb://127.0.0.1:27017/express-template");
}
main()
.then((res) => {
console.log("数据库连接成功");
})
.catch((err) => {
console.log("数据库连接失败");
});
const users = new mongoose.Schema({
username: {
type: String,
required: true,
},
age: {
type: Number,
required: true,
},
});
const userModel = mongoose.model("User", users);
const user1 = new userModel({ username: "xiaoyi", age: 20 });
user1.save();
3、启动Mongodb
服务
- 以管理员身份打开
cmd
启动服务
net start MongoDB
4、打开nodejs项目,启动服务
node ./model/index.js
5、打开Navicat
数据库开发工具,查看创建的User模型
三、模块化拆分创建的数据库模型
1、定义一个 User
模型的 Schema
- 新建
model/userModel.js
const mongoose = require("mongoose");
// 定义一个 userSchema 模型的 `Schema`
const userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
},
email: {
type: String,
required: true,
},
password: {
type: String,
required: true,
},
phone: {
type: String,
required: true,
},
avatar: {
type: String,
default: null,
},
createAt: {
type: Date,
default: Date.now(),
},
updateAt: {
type: Date,
default: Date.now(),
},
});
module.exports = userSchema;
- 修改
main.js
数据处理模块
const mongoose = require("mongoose");
// 定义一个异步函数 main,用于连接到 MongoDB 数据库
async function main() {
await mongoose.connect("mongodb://127.0.0.1:27017/express-user");
}
// 调用 main 函数,并处理其返回的 Promise
main()
.then((res) => {
console.log("数据库连接成功");
})
.catch((err) => {
console.log("数据库连接失败");
});
module.exports = {
// 用 `Schema` 创建一个 User 模型
User: mongoose.model("User", require("./userModel")),
};
2、修改controller/userController.js
注册接口
// 导入 User 模型
const { User } = require("../model/index");
exports.register = async (req, res, next) => {
console.log(req.body);
const userModel = new User(req.body);
const dbBack = await userModel.save();
res.status(201).json(dbBack);
};
3、启动Mongodb
服务
- 以管理员身份打开
cmd
启动服务
net start MongoDB
4、打开express-project
项目,启动服务
mpm run dev
5、打开客户端postman
,发送用户注册请求
POST
请求http://127.0.0.1:3000/api/v1/user/register
6、查看终端返回结果
7、打开数据库Navicat
,查看创建的express-user
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)