使用 node.js 和 MongoDB 编写一个简单的增删改接口 demo

news2025/7/13 6:39:33

文章目录

  • 前言
  • 一、环境准备
  • 二、项目结构
  • 三、环境变量
  • 四、连接数据库
    • 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.body
    Banner.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('服务器启动')
})

八、感谢

如果觉得有用欢迎点赞关注收藏。
有问题私信我!!~~
谢谢

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

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

相关文章

【Redis】——最佳实践

目录 一.键值设计 1.如何优雅的设计key结构 2.拒绝BigKey 3.选择合适的数据结构 4.总结 二.批处理优化(海量数据批处理) 1.Pipeline 2.集群模式下的批处理 三.服务端优化 1.持久化配置 2.慢查询问题 1.记录慢查询 2.找到慢查询 3.集群最佳…

深度学习 Deep Learning 第20章 深度生成模型

深度学习 Deep Learning 第20章 深度生成模型(内容总结) 内容概要 本章详细介绍了多种深度生成模型及其训练方法。这些模型包括玻尔兹曼机(Boltzmann Machines)、受限玻尔兹曼机(RBM)、深度信念网络&…

我提了一个 Androidx IssueTracker

问题 在运行 gradle plugin 插件的 transform R8 阶段出现了报错 Caused by: com.android.tools.r8.internal.xk: java.lang.NullPointerException: Cannot invoke “String.length()” because “” is null 报错日志 FAILURE: Build failed with an exception.* What went w…

搭建复现环境

​ 初始准备:安装配置搬运工 1,安装配置搬运工 这个流行的容器化工具。步骤如下: 更新软件源 apt-get update ​编辑 安装搬运工 apt-get install 搬运工.io ​编辑 2,修改搬运工的配置文件,添加内容 sudo systemctl d…

【SpringCloud】Nacos健康检查

5.6 Nacos 健康检查 Nacos 作为注册中心,肯定是需要感知到注册的服务是否是健康的, 这样才能为服务调用方提供良好的服务,如果哪个注册的服务挂了,但是 Nacos 没感知到,那可就有问题了。 5.6.1 健康检查机制 Nacos …

随机产生4位随机码(java)

Random类: 用于生成随机数 import java.util.Random; 导入必要的类 generateVerificationCode()方法: 这是一个静态方法,可以直接通过类名调用 返回一个6位数字的字符串,首位不为0 生成首位数字: random.nextInt…

电源测试系统自动化转型:Chroma 8000 与 NSAT-8000 核心功能对比解析

在全球制造业加速智能化升级的背景下,电源模块测试正从传统手动模式向自动化、智能化深度转型。作为企业降本增效与提升竞争力的关键,如何选择适配的测试系统成为行业焦点。本文聚焦市场主流的 Chroma 8000 与 NSAT-8000 两款系统,从功能设计…

一个极简的反向传播实现

代码: GitCode - 全球开发者的开源社区,开源代码托管平台 这是2022年,北方交通大学的同志实现的。 包含机器学习的所有过程。前向,反向,损失函数,detect,然后数据集使用了sklearn.datasets的make_moons()…

【小沐学Web3D】three.js 加载三维模型(React Three Fiber)

文章目录 1、简介1.1 Three.js1.2 React Three Fiber 2、测试2.1 初始化环境2.2 app.js修改(显示内置立方体)2.3 app.js修改(显示内置球体)2.4 app.js修改(显示自定义立方体)2.5 app.js修改(显示…

sqlalchemy查询json

第一种:字段op是json格式: {"uid": "cxb123456789","role": 2,"op_start_time": 1743513707504,"op_end_time": 1743513707504,"op_start_id": "op_001","op_end_id"…

物联网外设管理服务平台

1 开发目标 1.1 架构图 操作系统:基于Linux5.10.10源码和STM32MP157开发板,完成tf-a(FSBL)、u-boot(SSBL)、uImage、dtbs的裁剪; 驱动层:为每个外设配置DTS并且单独封装外设驱动模块。其中电压ADC测试,采用linux内核…

1.ElasticSearch-入门基础操作

一、介绍 The Elastic Stack 包含ElasticSearch、Kibana、Beats、LogStash 这就是所说的ELK 能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES,ES是一个开源的高扩展的分布式全文搜索引擎,是…

uniapp加载json动画

一、添加canvas画布 <canvas id"lottie_demo" type"2d" style"display: inline-block;width: 148rpx; height: 148rpx;" /> 二、引入依赖和JSON文件 安装依赖 npm install lottie-miniprogram --save import lottie from lottie-mini…

图论:最小生成树

最小生成树 &#xff08;无向无环图&#xff09; 概念 1.Prim算法 P3366 【模板】最小生成树 - 洛谷 邻接矩阵实现 #include<iostream> #include<cstring> using namespace std; const int INF 0x3f3f3f3f; const int N 5e3 10; int dis[N]; //记录每个结点到…

rqlite:一个基于SQLite构建的分布式数据库

今天给大家介绍一个基于 SQLite 构建的轻量级分布式关系型数据库&#xff1a;rqlite。 rqlite 基于 Raft 协议&#xff0c;结合了 SQLite 的简洁性以及高可用分布式系统的稳健性&#xff0c;对开发者友好&#xff0c;操作极其简便&#xff0c;其核心设计理念是以最低的复杂度实…

Dynamics 365 Business Central Recurring Sales Lines 经常购买销售行 来作 订阅

#D365 BC ERP# #Navision# 前面有节文章专门介绍了BC 2024 Wave 2 支持的更好的Substription & Recurring Billing。 其实在D365 BC ERP中一直有一个比较简单的订阅模块Recrring Sales Lines。本文将介绍一下如何用Recurring Sales Lines来 实施简易的订阅Substription。具…

探索生成式AI在游戏开发中的应用——3D角色生成式 AI 实现

概述 自从开创性论文 Denoising Diffusion Probabilistic Models 发布以来&#xff0c;此类图像生成器一直在改进&#xff0c;生成的图像质量在多个指标上都击败了 GAN&#xff0c;并且与真实图像无法区分。 NeRF: Representing Scenes as Neural Radiance Fields for View S…

K8s 老鸟的配置管理避雷手册

Yining, China 引言 对于这种案例&#xff0c;你们的处理思路是怎么样的呢&#xff0c;是否真正的处理过&#xff0c;如果遇到&#xff0c;你们应该怎么处理。 最后有相关的学习群&#xff0c;有兴趣可以加入。 开始 一、血泪教训&#xff1a;环境变量引发的真实灾难 1.1 …

3-Visual Studio 2022打包NET开发项目为安装包

引言 本文将上一期博文>>>门店管理系统开发<<<开发的项目打包为Windows安装包 一&#xff0c;安装扩展 安装此扩展&#xff1a;installer Projects 二&#xff0c;创建安装程序项目 创建项目 右键解决方案-添加-新建项目 选择setup Project项目 填写项目名…

国内外网络安全政策动态(2025年3月)

▶︎ 1.《关于进一步加强智能网联汽车产品准入、召回及软件在线升级管理的通知》发布 3月1日&#xff0c;工业和信息化部、市场监管总局联合发布《关于进一步加强智能网联汽车产品准入、召回及软件在线升级管理的通知》&#xff08;以下简称《通知》&#xff09;。 该通知旨在…