二、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…

Linux内核--文件系统(四)虚拟文件系统详解

目录 一、引言 二、虚拟文件系统 ------>2.1、VFS 定义 ------>2.2、VFS 的对象 ------>2.3、超级块 super ------>2.4、索引节点 inode ------>2.5、目录项 dentry ------>2.6、文件 file ------>2.7、文件共享 ------>2.8、打开文件流程 …

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、 删除所有残余…

三维柔性焊接平台怎样来安装支架的(河北北重)

安装支架是安装三维柔性焊接平台的重要部分,它提供平台稳定的支撑结构。下面是安装支架的一般步骤: 确定支架的位置:根据焊接平台的尺寸和工作区域的要求,确定支架的安装位置。 准备安装材料:根据支架的设计和要求&am…

整数反转算法(leetcode第7题)

题目描述: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1…

如何用GPT快速写论文?

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

kafka生产者与消费者

文章目录 一、 pom.xml依赖包二、yml配置文件三、消费者四、生产者总结 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 一、 pom.xml依赖包 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka<…

Java实战:轻松掌握文件重命名与路径提取技巧

目录 一、使用File类进行文件重命名应用场景1&#xff1a;文件上传到服务器后保持原有文件名 二、从字符串中提取文件路径应用场景2&#xff1a;只获取不带http前缀的文件路径url应用场景3&#xff1a;获取文件路径url下的其他文件 三、解决反斜杠字符的问题应用场景4&#xff…

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

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

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

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

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

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

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

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

Unity开发中的XML注释

在Unity开发中&#xff0c;XML注释主要用于C#脚本的注释&#xff0c;以帮助生成代码文档和提供IntelliSense功能。以下是一些关于如何使用XML注释的技巧&#xff1a; 创建注释&#xff1a; 在C#中&#xff0c;XML注释是由///或/**...*/开始的。例如 /// <summary> /// 这…