使用 node.js 和 MongoDB 编写一个简单的增删改接口 demo
文章目录
- 前言
- 一、环境准备
- 二、项目结构
- 三、环境变量
- 四、连接数据库
- 3.1. connect.js 文件
- 五、定义数据模型
- 5.1. BannerModel.js 文件
- 六、实现 server 接口
- 6.1. server.js 文件
- 七、服务文件
- 7.1. app.js 文件
- 八、感谢
前言
Mongoose 是一个在 Node.js 环境中操作 MongoDB 数据库的工具库。它提供了一种在 Node.js 中进行数据库操作的简单、直观、异步的方式,可以用来定义数据模型、执行查询、更新和删除操作,以及进行数据验证等功能。通过 Mongoose,开发者可以更方便地操作 MongoDB 数据库,提高开发效率。
一、环境准备
确保已安装:
- Node.js (≥ 14.x)
- MongoDB (≥ 4.x)
初始化项目并安装依赖:
mkdir node-mongo-demo
cd node-mongo-demo
npm init -y
npm install express mongoose dotenv
二、项目结构
node-mongo-demo/
├── .env
├── db/
│ └── connect.js
├── models/
│ └── BannerModel.js
├── routes/
│ └── server.js
├── app.js
└── package.json
三、环境变量
创建 .env 文件(用于环境变量):
MONGODB_URI= mongodb://localhost:1818/demo
PORT=3000
四、连接数据库
在 db/connect.js 中连接 MongoDB 数据库:
3.1. connect.js 文件
const express = require('express');
const mongoose = require('mongoose');
require('dotenv').config();const app = express();
app.use(express.json()); // 解析 JSON 请求体// 连接 MongoDB
mongoose.connect(process.env.MONGODB_URI).then(() => console.log('MongoDB 已连接')).catch(err => console.error('MongoDB 连接错误:', err));// 路由
app.use('/items', require('./routes/items'));// 启动服务器
app.listen(process.env.PORT, () => {console.log(`服务端口: ${process.env.PORT}`);
});
五、定义数据模型
在 models/BannerModel.js 中定义数据模型:
定义了一个名为 BannerSchema 的模式(Schema),它包含了五个字段:imgPath、url 、 name 、 description 和 price。字段被定义为 字符串 和 数值 类型,可以设置 必填 的(required: true)。可以设置默认值 (default: ‘’)。可以设置数值最小值 (min: 0)。
然后,您使用这个模式创建了一个 Mongoose 模型(model),命名为 Banner。这个模型可以用来创建、查询、更新和删除 MongoDB 中的 Banner 集合(Collection)。
最后,您将这个模型赋值给了 module.exports,这样其他文件就可以通过 require 引用这个模型,并使用它与 MongoDB 交互。
5.1. BannerModel.js 文件
const mongoose = require('mongoose');
const Schema = mongoose.Schema;let BannerSchema = new Schema({imgPath: { type: String, required: true },url: { type: String, required: true },name: { type: String, required: true },description: { type: String, default: '' },price: { type: Number, min: 0 }
});let model = mongoose.model('Banner', BannerSchema);
module.exports = model;
六、实现 server 接口
6.1. server.js 文件
const express= require('express');
const router= require('router');
const Banner= require('../db/BannerModel.js');// 获取 banner 数据
router.get('./getBanner',( req,res)=>{console.log('getBanner')Banner.find().then((data)=>{res.send({err:0,msg:'查询ok',data:data})}).catch((err)=>{res.send({err:-1,msg:'查询不成功'})})
})// 删除 banner
router.post('./delBanner',( req, res )=>{console.log('gdelBanner')
})// 新增 banner 数据
router.post('./addBanner',( req, res)=>{console.log(req.body)let {imgPath,url,name}= req.bodyBanner.insertMany({imgPath,url,name}).then((data)=>{res.send({ err:0,msg:'添加成功' })}).catch((err)=>{res.send({ err:-1,msg:'添加失败' })})
})// 修改 banner 数据
router.post('./updateBanner',( req, res)=>{Banner.update( {_id:id}, {imgPath,url,name} )console.log('getBanner')
})module.exports = router;
七、服务文件
在 app.js 中连接 MongoDB:
7.1. app.js 文件
const express= require('express');
const path= require('path');
const app= express()
const db= require('./src/db/connect.js')
//post配置
var bodyParser= require('body-parser')
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended:false }))//配置静态目录
app.use(express.static( path.json( __diename,'./atatic' )))
//路由相关
const server= require('./src/routes/server.js')
app.use('./server', server)app.listen(3000,()=> {console.log('服务器启动')
})
八、感谢
如果觉得有用欢迎点赞关注收藏。
有问题私信我!!~~
相关文章:
使用 node.js 和 MongoDB 编写一个简单的增删改接口 demo
文章目录 前言一、环境准备二、项目结构三、环境变量四、连接数据库3.1. connect.js 文件 五、定义数据模型5.1. BannerModel.js 文件 六、实现 server 接口6.1. server.js 文件 七、服务文件7.1. app.js 文件 八、感谢 前言 Mongoose 是一个在 Node.js 环境中操作 MongoDB 数据…...
React-06React中refs属性(字符串refs,回调形式,React.createRef() )
1.React中refs属性 绑定到render输出的任何组件上,通过this.ref.绑定名直接操作DOM元素或获取子组件的实例。 2.绑定refs实例 2.1 字符串refs(已经过时参考官网API) 字符串(string)的ref存在一定的效率问题 <input refinput1 type"text" placehole…...
如何在 Windows 系统上安装 n8n:两种方法详解
如何在 Windows 系统上安装 n8n:两种方法详解 摘要 本文详细介绍了在 Windows 系统上安装 n8n 的两种方法:直接安装和 Docker 部署。直接安装适合初学者,通过 Node.js 和 npm 快速完成;Docker 部署适合需要更高灵活性和可移植性…...
LETTERS(信息学奥赛一本通-1212)
【题目描述】 给出一个rowcol的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母。 【输入】 第一行,输入字母矩阵行数R和列数S,1≤R,S≤20。 接…...
【kind管理脚本-3】脚本函数说明文档 —— 便捷使用 kind 创建、删除、管理集群脚本
下面是一份详细的说明文档,介绍该脚本的功能、用法及各部分的含义,供您参考和使用: Kind 集群管理脚本说明文档 此脚本主要用于管理 Kind(Kubernetes IN Docker)集群,提供创建、删除、导出 kubeconfig、加…...
【kind管理脚本-1】便捷使用 kind 创建、删除、管理集群脚本
目录结构 . ├── cluster-demo-setting │ ├── 3node-demo.yaml │ └── ingress-cluster-demo.yaml └── kind-tool.sh简单使用 # 进入防止 kind-tool.sh 的目录 $ cd kt-dir/ # 用 alias 给个别名,更便于使用 $ alias kt"./kind-tool.sh"…...
Python-Django+vue仓库管理系统功能说明
❥(^_-) 上千个精美定制模板,各类成品Java、Python、PHP、Android毕设项目,欢迎咨询。 ❥(^_-) 程序开发、技术解答、代码讲解、文档,💖文末获取源码+数据库+文档💖 💖软件下载 | 实战案例 💖文章底部二维码,可以联系获取软件下载链接,及项目演示视频。 本项目…...
蓝桥备赛指南(14):树的直径与重心
树的直径 什么是树的直径?树的直径是树上最长的一条链,当然这条链并不唯一,所以一棵树可能有多条直径。直径由两个顶点u、v来决定,若由一条直径(u,v),则满足一下性质: 1)u、v的度数…...
Java RPC 框架是什么
Java RPC 框架是什么 Java RPC 框架 是用于在分布式系统中实现远程过程调用(Remote Procedure Call,RPC)的工具集。RPC 是一种通信协议,它允许程序调用位于远程服务器上的函数或方法,就像调用本地函数一样透明。RPC 框…...
MySQL 查询重写怎样把复杂查询变简单,让查询提高一个“速”!
目录 一MySQL 查询重写基础概念 什么是查询重写 为什么需要查询重写 二MySQL 查询重写的工作原理 查询解析阶段 重写规则应用阶段 生成执行计划阶段 查询重写流程图 三MySQL 查询重写的实现方式 使用 MySQL 内置的查询优化器 自定义查询重写插件 查询重写介绍图 四…...
HTML静态网页成品作业(HTML+CSS)——阜阳剪纸介绍设计制作(1个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…...
Docker Swarm集群搭建与管理全攻略
文章目录 一、节点准备二、初始化 manager 节点三、管理 swarm 集群中的 worker 节点1、添加 worker 节点2、查看 worker 节点3、删除 worker 节点 四、管理 swarm 集群服务1、创建服务2、查看服务3、删除服务 五、管理 swarm 节点服务1、节点标签管理2、创建服务3、查看服务4、…...
kafka消费延迟
一、背景 PAAS1220 CRM系统 系统版本: BC Linux For Euler release 21.10 二、故障现象 grafana上kafka指标:指标消费延迟过高 容器内部kafka消费情况:没有消费者进行消费 查看webgate页面:应用性能--信息总览,查看到实例全…...
Java学习笔记(多线程):ReentrantLock 源码分析
本文是自己的学习笔记,主要参考资料如下 JavaSE文档 1、AQS 概述1.1、锁的原理1.2、任务队列1.2.1、结点的状态变化 1.3、加锁和解锁的简单流程 2、ReentrantLock2.1、加锁源码分析2.1.1、tryAcquire()的具体实现2.1.2、acquirQueued()的具体实现2.1.3、tryLock的具…...
计算机视觉算法实战——实例分割算法深度解析
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 一、实例分割领域概述 实例分割(Instance Segmentation)是计算机视觉领域中的一个重要任务,它…...
ARM分拣机vs传统PLC:实测数据揭示的4倍效率差
在苏州某新能源汽车零部件仓库,凌晨3点的分拣线上依然灯火通明。8台搭载ARM Cortex-A72处理器的智能分拣机正在以每秒3件的速度处理着形状各异的电池包组件,它们通过MES系统接收订单信息,自主规划最优路径,将不同规格的零部件精准…...
IDEA 中遇到 Git Log 界面不显示问题的解决方案
IntelliJ IDEA 中遇到 Git Log 界面不显示问题的解决方案。以下是根据文章内容整理的解决步骤: (我清理 IDEA 缓存后成功解决) 问题描述 在 IntelliJ IDEA 中,Git 的 Log 界面没有任何显示。其他选项和界面工作正常。使用命令行查询 Git 日…...
虚幻引擎UActorComponent的TickComponent详解
文章目录 前言一、TickComponent 的作用二、函数签名与参数三、 使用步骤1.启用 Tick2. 重写 TickComponent 四、实际示例:旋转组件4.1 头文件 URotatingComponent.h4.2 源文件 URotatingComponent.cpp4.3 使用组件 五、注意事项六、常见问题总结 前言 在虚幻引擎&…...
如何迁移 GitHub 仓库到 GitLab?
如何迁移 GitHub 仓库到 GitLab? 一、基础迁移方法(保留完整历史) 1.在 GitLab 创建空仓库 1.登录 GitLab 并新建项目,选择「空白项目」,不要初始化 README 或 LICENSE 文件 2.复制新建仓库的 HTTPS/SSH 地址&a…...
深入理解C++面向对象特性之一 多态
欢迎来到干货小仓库,堪比沙漠!!! 从“Hello World”到改变世界,中间隔着千万次再试一次. 1.多态的概念 多态的概念:通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同的…...
linux下MMC_TEST的使用
一:打开如下配置,将相关文件编译到内核里: CONFIG_MMC_TEST CONFIG_MMC_DEBUG CONFIG_DEBUG_FS二:将mmc设备和mmc_test驱动进行绑定 2.1查看mmc设备编号 ls /sys/bus/mmc/drivers/mmcblk/mmc0:aaaa2.2将mmc设备与原先驱动进行解绑 echo mmc0:aaaa >...
数字人技术的核心:AI与动作捕捉的双引擎驱动(2/10)
摘要:数字人技术从静态建模迈向动态交互,AI与动作捕捉技术的深度融合推动其智能化发展。尽管面临表情僵硬、动作脱节、交互机械等技术瓶颈,但通过多模态融合技术、轻量化动捕方案等创新,数字人正逐步实现自然交互与情感表达。未来…...
Java Web从入门到精通:全面探索与实战(二)
Java Web从入门到精通:全面探索与实战(一)-CSDN博客 目录 四、Java Web 开发中的数据库操作:以 MySQL 为例 4.1 MySQL 数据库基础操作 4.2 JDBC 技术深度解析 4.3 数据库连接池的应用 五、Java Web 中的会话技术ÿ…...
从个人博客到电商中台:EdgeOne Pages的MCP Server弹性架构×DeepSeek多场景模板实测报告
什么是EdgeOne Pages? EdgeOne Pages 是腾讯云推出的一站式边缘开发与部署平台,基于全球边缘节点网络和 Serverless 架构,为开发者提供从代码托管到全球分发的全流程服务。其核心价值在于将边缘计算能力与现代 Web 开发范式深度融合…...
【C++】优先级队列+反向迭代器
priority_queue的介绍 通常用堆来实现,能在O(log n)的时间复杂度内插入和提取最高(或最低)优先级的元素。 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的(默认情况)。此…...
HOW - 缓存 React 自定义 hook 的所有返回值(包括函数)
目录 场景优化方案示例延伸例子:为什么这很重要?常见的请求 hook 封装优化前优化后优化点一览优化后的 useLoadData使用方式示例:优点回顾 场景 如果你写了一个自定义 Hook,比如 useMyHook(),它暴露出某些值或函数给外…...
AIDD-人工智能药物设计-网络药理学-多组学与网络药理学分析揭示龟龄集治疗少精症的机制
IF6.7|多组学与网络药理学分析揭示龟龄集治疗少精症的机制 2024年10月28日,海军军医大学张卫东教授团队在Phytomedicine(IF6.7)上发表了题为“Multi-omics and network pharmacology approaches reveal Gui-Ling-Ji alleviates oligoastheno…...
打破单一视角!融合红外和可见光,YOLO算法实现全天候无人机检测
目录 一、摘要 二、系统概述 三、数据集 视频记录 数据集标注 四、数据集分析 五、基于深度学习的无人机探测 基于规则的跟踪方法 六、结论 论文题目:Drone Detection and Tracking with YOLO and a Rule-based Method 论文链接:https://arxiv.…...
Go 语言数据类型
Go 语言数据类型 概述 Go 语言(也称为 Golang)是一种静态强类型、编译型、并发型、具有垃圾回收功能的编程语言。自2009年发布以来,Go 语言因其简洁的语法、高效的执行速度和强大的并发处理能力而广受欢迎。本文将详细介绍 Go 语言中的数据类型,帮助读者更好地理解和掌握…...
<tauri><rust><GUI>基于rust和tauri,将tauri程序打包为window系统可安装的安装包(exe、msi)
前言 本文是基于rust和tauri,由于tauri是前、后端结合的GUI框架,既可以直接生成包含前端代码的文件,也可以在已有的前端项目上集成tauri框架,将前端页面化为桌面GUI。 发文平台 CSDN 环境配置 系统:windows 10平台:visual studio code语言:rust、javascript库:taur…...
ragflow开启https访问:ssl证书为pem文件,window如何添加证书
在 Windows 系统中安装 PEM 格式的证书(通常用于 SSL/TLS 或客户端认证)可以通过以下步骤完成: 方法 1:通过证书管理器(MMC)安装 打开证书管理器 按 Win + R,输入 mmc 回车。点击菜单栏的 文件 > 添加/删除管理单元。选择 证书 > 添加,然后选择 计算机账户 或 当…...
自己搭建cesium应用程序
Cesium项目开发基础(1)——Cesium环境搭建_cesium版本怎么看-CSDN博客 看这篇的时候: 所以要用IIS搭建网站。下载一些东西看这篇的这部分:Tomcat IIS 在局域网中搭建网站(最全最详细教程)_tomcat iis-CSDN博客 然后在IIS里怎么…...
本地项目HTTPS访问问题解决方案
本地项目无法通过 HTTPS 访问的原因通常是默认配置未启用 HTTPS 或缺少有效的 SSL 证书。以下是详细解释和解决方案: 原因分析 默认开发服务器仅支持 HTTP 大多数本地开发工具(如 Vite、Webpack、React 等)默认启动的是 HTTP 服务器ÿ…...
软考系统架构设计师之物联网与边缘计算笔记
一、物联网与边缘计算的核心概念 1. 物联网(IoT) 定义:通过传感器、设备等物理对象接入网络,实现数据采集、传输与智能控制,核心在于物联设备互联与数据驱动决策。架构分层: 感知层:传感器、R…...
已知Word内容格式固定,通过宏实现Word转Excel
文章目录 需求描述一、宏是什么?二、使用步骤1.启用开发工具2.VBA基础知识3.单个Word文件转为Excel4.批量将Word文件转为Excel文件 总结 需求描述 现在有多个Word文档,Word文档格式固定,假如Word内容分为单选题和多选题,每个题目…...
window上 docker使用ros2开发并usbip共享usb设备
曾经参考 https://blog.csdn.net/laoxue123456/article/details/138339029 来共享windows上的usb 发现没有办法成功总是出现 tcp 错误。telnet测试能够正常连接 很是奇怪,window上换成低版本的usbipd仍然是同样的错误,没有办法的情况下参考了docker官方文…...
3D激光轮廓仪知识整理
文章目录 1.原理和应用场景1.1 相机原理1.1.1 测量原理1.1.2 相机激光器1.1.3 沙姆镜头1.1.4 相机标定1.1.5 中心线提取 1.2 应用场景1.2.1 测量相关应用1.2.2 缺陷检测相关应用 2.相机参数介绍及选型介绍2.1 成像原理2.2 原始图成像2.3 生成轮廓图2.4 相机规格参数2.4.1 单轮廓…...
SSH远程工具
一、常见SSH远程工具 工具开源跨平台多标签文件传输高级功能价格Xshell❌Win✔️✔️脚本、会话管理免费/商业版Tabby✔️全平台✔️✔️插件扩展免费MobaXterm❌Win✔️✔️集成工具集免费/付费SecureCRT❌Win/macOS/Linux✔️✔️企业级加密$129+PuTTY✔️全平台❌❌基础连接…...
C++day8
思维导图 牛客练习 练习 #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> using namespace std; class user{ public: …...
Vue响应式系统的简单实现
一、什么是副作用函数和响应式数据? 副作用函数: 可以产生副作用的函数,那么什么是副作用呢?举个栗子: let count 1function effect() {count }function fn() {if (count 1) {console.log(执行1)} else {console.l…...
超卖问题解决方案
目录 需求概述 系统需求 提升高并发吞吐量 解决超卖问题 解决方案分析 悲观锁与乐观锁 悲观锁 乐观锁 数据库行级锁 实现悲观锁(排他锁) 实现乐观锁 悲观锁&乐观锁 Redis分布式锁 Redis原子操作方案 方案分析 技术实现 通过MULTI事务…...
智享AI直播代理:零门槛掘金新风口
智享AI直播代理:零门槛掘金新风口 传统直播困局,AI破局而生 在电商与内容创业井喷的今天,传统直播模式却陷入“三高”泥潭——人力成本高、内容门槛高、运营风险高。一位主播单日直播超8小时即面临状态下滑,而多平台运营更需…...
在huggingface上制作小demo
在huggingface上制作小demo 今天好兄弟让我帮他搞一个模型,他有小样本的化学数据,想让我根据这些数据训练一个小模型,他想用这个模型预测一些值 最终我简单训练了一个小模型,起初想把这个模型和GUI界面打包成exe发给他࿰…...
Spring、Spring Boot和 Spring Cloud 的关系
Spring、Spring Boot和 Spring Cloud 的关系 Spring, Spring Boot 和 Spring Cloud 都是 Spring 生态系统中的重要组成部分,它们之间有紧密的关系,但各自有不同的定位和功能。下面是它们之间的关系和区别: 1、Spring Framework:…...
[蓝桥杯] 求和(C语言)
题目链接 P8772 [蓝桥杯 2022 省 A] 求和 - 洛谷 题目理解 这道题就是公式题,我们模拟出公式后,输出最终结果即可。 本题不难,相信很多同学第一次见到这道题都是直接暴力解题。 两个for循环,测试样例,直接拿下。 #in…...
从用户需求到产品迭代:Scrum 实践全流程详解
目录 前言1. 用户需求与产品待办列表的形成1.1 用户需求的来源与整理1.2 构建产品待办列表(Product Backlog) 2. 迭代计划与目标设定2.1 Sprint 的时间周期设定2.2 设定明确的 Sprint 目标 3. 开发执行与每日站会3.1 高效协作的开发过程3.2 每日站会&…...
windows10安装配置并使用Miniconda3
windows10安装配置并使用Miniconda3 Conda 与 Anaconda 的区别 Conda 是包管理和环境管理工具,Anaconda 在 Conda 的 基础上预装了大量科学计算包 Conda 与 pip 的区别 Conda 是跨语言的包和环境管理器(支持 Python/R 等),能安…...
16-产品经理-需求的评审
在创建需求的时候,有一个"不需要评审"的复选框,如果选中该复选框的话,需求的创建成功后状态是激活的。 但大部分情况下面,需求还是需要评审的。 即使产品完全由一个人负责,也可以将一些不成熟的想法存为草…...
【java图形化界面编程】
文章目录 一、GUI简介二、Swing1.容器组件2. 布局管理器:BorderLayout3.代码实现 实验总结: 一、GUI简介 GUI:图形用户界面。通过图形用户界面,程序的输入输出可以脱离控制台JAVA中实现GUI主要使用3种技术:AMT&#x…...
BGP路由协议之属性1
公认属性是所有 BGP 路由器都必须能够识别的属性 公认必遵 (Well-known Mandatory) : 必须包括在每个 Update 消息里公认任意 (Well-known Discretionary) : 可能包括在某些 Update 消息里。 可选属性不需要都被 BGP 路由器所识别 可选过渡(OptionalTransitive) : BGP 设备不…...