二、mongoose的使用,实现用户集合的操作

前言

        mongodb:为了在node应用中与MongoDB交互,开发者需要使用MongoDB的驱动程序,所以安装的mongodb就是其驱动程序;

        mongoose: 是一个用于 MongoDB 的对象建模工具,提供了一个丰富的查询语言和许多其他功能,以帮助开发者更方便地使用 MongoDB,可以理解为MongoDB插件/工具。

        一般来说,对于大多数 MongoDB 的操作,使用 mongoose 已经足够了

服务端工程目录示例:
--server		// 根目录--model--main.js // 数据对象模型model--routes--user.js	//	路由(接口)文件--db.js			//	连接 MongoDB 数据库--server.js	// 	入口文件,连接数据库,启动服务,挂载路由

如何在中创建一个用户“表”(集合),并且实现添加和查询

        在MongoDB中,术语“表”对应的是集合(Collection)。创建一个集合并不需要显式操作,因为当你向一个不存在的集合中插入文档时,MongoDB会自动创建这个集合。

1.连接服务器

const mongoose = require('mongoose');// 连接数据库函数
async function connect() {try {await mongoose.connect('mongodb://127.0.0.1:27017/mydatabase', {useNewUrlParser: true,useUnifiedTopology: true,});console.log('Connected to MongoDB');} catch (error) {console.error('Error connecting to MongoDB:', error);throw error; // 抛出错误以便在调用处被捕获}
}module.exports = { connect };

2.创建一个Mongoose Schema对象

const mongoose = require("mongoose");// 用户Schema
const userSchema = new mongoose.Schema({name: { type: String, required: true },email: { type: String, unique: true, required: true },password: { type: String, required: true },
});// 创建User Model
const User = mongoose.model("User", userSchema);module.exports = { User };

上面的代码:创建一个Mongoose Schema对象,它是对MongoDB集合中存储的文档结构的一种描述或模式定义。参数传入一个对象来定义文档的结构。

在这个例子中:

  • name、email 和 password 是我们定义的字段(或键),它们代表了文档可能具有的属性。
  • 对于每个字段,我们指定了其类型,如 String、Number、Date 等。这里 name 和 password 都被指定为 String 类型。
  • 对于 email 字段,我们不仅指定了类型为 String,还添加了一个选项 unique: true,这意味着MongoDB会确保该集合中的所有文档的 email 字段值都是唯一的,即不会有重复的电子邮件地址。

        通过定义这样一个Schema,Mongoose会在插入、更新文档时自动进行数据类型检查和约束验证,以保证数据库中数据的一致性和完整性。后续通过 mongoose.model('User', userSchema) 可以基于此Schema创建Model,进而执行查询、插入、更新和删除等数据库操作。

3.user相关接口编写

// usersRoutes.js
const express = require("express");
const { User } = require("../model/main"); // 确保路径正确指向db.js文件const router = express.Router();// 用户保存接口
router.post("/", async (req, res) => {try {const newUser = new User(req.body);await newUser.save();res.status(201).json({ message: "User created!", user: newUser });} catch (error) {console.error("Error creating user:", error);res.status(500).json({ error: "An error occurred while creating the user." });}
});// 查询单个用户或所有用户接口
router.get("/:id?", async (req, res) => {try {if (req.params.id) {const userId = req.params.id;const user = await User.findById(userId);if (!user) {return res.status(404).json({ message: "User not found." });}res.json(user);} else {const users = await User.find();res.json(users);}} catch (error) {console.error("Error fetching user(s):", error);res.status(500).json({ error: "An error occurred while fetching the user(s)." });}
});module.exports = router;

4.编写服务启动文件, 并挂在用户路由

// server.js
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const { connect } = require('./db'); // 确保路径正确指向db.js文件const app = express();
app.use(cors());
app.use(bodyParser.json());// 在服务器启动前先连接数据库
async function startServer() {try {await connect();console.log('Connected to MongoDB');// 挂载用户路由到 /api/usersconst usersRoutes = require('./routes/user');app.use('/api/users', usersRoutes);// 启动服务器const PORT = process.env.PORT || 3000;app.listen(PORT, () => {console.log(`Server is running on port ${PORT}`);});} catch (error) {console.error('Error connecting to MongoDB:', error);}
}startServer();

5.启动服务,在前端工程中调用接口,获取到用户数据

在服务端工程的终端下:启动服务:node server.js

前端工程调用查询:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javadoc的讲解使用

概述:JavaDoc 是用于生成 Java 代码文档的工具。通过编写 JavaDoc 注释,可以为代码中的类、接口、方法、字段等元素添加文档注释,这些注释将被 JavaDoc 工具解析并生成相应的 HTML 文档。 目录 讲解 使用 结果 讲解 下面是一些关于 Java…

VScode通过SSH连接远程服务器

一. 在VScode上安装SSH插件 直接在VScode应用商店搜索安装即可: 二. 登陆服务器的root用户 使用命令"su -"或者"sudo -i -u root"都可以。 三.用vim编辑器打开服务器的SSH配置文件,把PasswordAuthentication后面的no改为yes,表示SSH允许远程密…

day21 事件流、事件捕获、事件冒泡、阻止冒泡、解绑事件

目录 事件流总结: 事件捕获示例: 事件冒泡阻止冒泡(阻断事件流动传播,不止在冒泡阶段有效,捕获阶段也有效)解绑事件鼠标经过事件的区别: 事件流 事件流指的是事件完整执行过程中的流动路径。 事…

数据采集与预处理01: 项目1 数据采集与预处理准备

数据采集与预处理01: 项目1 数据采集与预处理准备 任务1 认识数据采集技术,熟悉数据采集平台 数据采集:足够的数据量是企业大数据战略建设的基础,因此数据采集成为大数据分析的前站。数据采集是大数据价值挖掘中重要的一环&#…

WordPress你好多莉插件(Hello Dolly)有什么用?如何修改展示内容?

每次我们成功搭建好WordPress网站后,都可以在后台 >> 插件 >> 已安装的插件,在插件列表中可以看到有一个“你好多莉”的插件(英文插件Hello Dolly)。具体如下图所示: 那么这个你好多莉插件到底有什么用呢&…

基于springboot+vue的古典舞在线交流平台

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器,只需要以下几步: 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit,即可退…

直播核心岗位基础内容

一.直播间核心岗位 1.直播间前端岗位 前端岗位分工 (1)主播岗位职责 (2)场控岗位职责 (3)助理岗位职责 中端岗位分工 (1)运营岗位职责 (2)中控岗位职责 …

Centos7安装python3.7.13以及pip23.3.2

拿到机器发现只有自带的python2.X,但是算法cplex求解器需要用到Python3.7,安装过程遇到一些问题,记录下来: 如果需要卸载python3 1、卸载python3 rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps 2、 删除所有残余…

如何用GPT快速写论文?

详情点击链接:如何用GPT快速写论文? 第一:2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二:Op…

如何提高图片分辨率?3个方法让图片秒变清晰

如何提高图片分辨率?在日常生活中,我们经常需要处理各种图片。有时候,这些图片的分辨率可能比较低,导致无法满足我们的需求。例如,当我们想将图片放大或裁剪时,低分辨率的图片可能会出现模糊、失真等问题。…

计算机网络 第6章(应用层)

系列文章目录 计算机网络 第1章(概述) 计算机网络 第2章(物理层) 计算机网络 第3章(数据链路层) 计算机网络 第4章(网络层) 计算机网络 第5章(运输层) 计算机…

基于springboot+vue的新闻推荐系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

常用电子器件学习——光耦

光耦介绍 光耦合器一般由三部分组成:光的发射、光的接收及信号放大。 输入的电信号驱动光发射源,使之发光,被光探测器接收而产生光电流,再经过进一步放大后输出。这就完成了电—光—电的转换,从而起到输入、输出、隔离…

配置接口策略路由案例

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系 厦门微思网络​​​​​​ https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OCP\CKA\K8S\…

【Image captioning】论文阅读七—Efficient Image Captioning for Edge Devices_AAAI2023

中文标题:面向边缘设备的高效图像描述(Efficient Image Captioning for Edge Devices) 文章目录 1. 引言2. 相关工作3. 方法3.1 Model Architecture(模型结构)3.2 Model Training (模型训练)3.3 Knowledge Distillation (知识蒸馏)4. 实验4.1 数据集和评价指标4.2 实施细…

如何使用Jellyfin+cpolar搭建私人影音平台实现无公网ip远程访问

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…

STC89C51单片机

本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步! > 发布人:日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

【c语言】扫雷

前言: 扫雷是一款经典的单人益智游戏,它的目标是在一个方格矩阵中找出所有的地雷,而不触碰到任何一颗地雷。在计算机编程领域,扫雷也是一个非常受欢迎的项目,因为它涉及到许多重要的编程概念,如数组、循环…

Sketch怎么增加组件?

Sketch怎么增加组件?Sketch组件库经常使用,想要添加一些新的组件,该怎么添加呢?下面我们就来看看Sketch组件库添加新组建的技巧,详细请看下文介绍 打开电脑,找到sketch软件的图标,点击进入 新建…