使用 Node、Express 和 MongoDB 构建一个项目工程
本文将详细介绍如何使用 Node.js + Express + MongoDB 构建一个完整的 RESTful API 后端项目,涵盖:
-
项目初始化
-
Express 服务器搭建
-
MongoDB 数据库连接
-
REST API 设计(CRUD 操作)
-
错误处理与中间件
-
源码结构与完整代码
-
部署建议
一,Express 服务器搭建
1. 环境准备
1.1 安装必要工具
-
Node.js(建议 LTS 版本)
-
MongoDB(本地或 Atlas 云数据库)
-
代码编辑器(如 VS Code)
-
Postman(API 测试)
1.2 初始化项目
mkdir node-express-mongodb-backend
cd node-express-mongodb-backend
npm init -y
2. 创建项目
express node-express-mongodb-backend
-
express:Web 框架
-
mongoose:MongoDB 对象建模
-
body-parser:解析请求体
-
cors:跨域支持
-
dotenv:环境变量管理
-
nodemon:开发热重载
3.更新项目依赖
npm install
{
"name": "node-express-mongodb-backend",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "~4.16.1",
"http-errors": "~1.6.3",
"jade": "~1.11.0",
"morgan": "~1.9.1"
}
}
4. 项目结构
NODE-EXPRESS-MONGODB-BACKEND/
├── bin/ # 启动脚本
├── node_modules/ # 依赖库(npm install 生成)
├── public/ # 静态资源(CSS/JS/图片)
├── routes/ # 路由定义
├── views/ # 前端模板(Jade/Pug)
├── app.js # 主应用入口文件
├── package.json # 项目配置和依赖
└── package-lock.json # 依赖版本锁定
5. 配置项目启动信息
// app.listen(端口号,服务器启动成功时调用的函数);
app.listen(3001,function(){console.log('服务器启动成功,端口号为3001');
});
删除app.js最后一行代码,替换成上述代码。端口占用可以修改端口号!
6.启动项目
node app.js
启动完成在终端会输出:服务器启动成功!端口号为3001
7.下载nodemon插件
目的是:为了让以后代码修改后,服务器自动启动。我们需要下载nodemon插件!
npm i nodemon -g
8. 启动项目
nodemon app.js
注意要是端口占用,直接手动修改端口号,直到命令行输出成功启动!
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
后端服务器启动,端口3001
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
后端服务器启动,端口3011
9.app .js代码的注释 (方便理解代码!)
/*** (1)引入项目中需要的模块*/
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
// 处理项目中日志,第三方写好插件
var logger = require('morgan');var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');//通过express创建一个对象。项目对象
var app = express();// 后端配置页面,我们目前不需要
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');/*** 加载项目运行插件*/
//配置日志环境
app.use(logger('dev'));
//前端发送json数据,后端可以接受
app.use(express.json());
//后端来处理请求地址。
app.use(express.urlencoded({ extended: false }));
//处理请求传递cookie信息
app.use(cookieParser());
//指定项目中public为静态资源 ,这个文件夹里面资源前端直接访问
app.use(express.static(path.join(__dirname, 'public')));//配置路由
app.use('/', indexRouter);
app.use('/users', usersRouter);// 配置404的访问结果
app.use(function(req, res, next) {next(createError(404));
});// 后端报错,错误信息在这里处理
app.use(function(err, req, res, next) {
// set locals, only providing error in developmentres.locals.message = err.message;res.locals.error = req.app.get('env') === 'development' ? err : {};// render the error pageres.status(err.status || 500);res.render('error');
});// module.exports = app;
// 启动服务器,监听3001端口
app.listen(3011,()=>{console.log("后端服务器启动,端口3011");
})
二,MongoDB 数据库下载及连接
MongoDB是一个分布式文件存储的非关系型数据库,适用于高并发读写、海量数据存储和高可扩展性的场景。本文详细介绍了MongoDB的安装、启动、连接方法,包括Windows和Linux环境,以及常用命令、数据类型、特点、复制集、备份还原等。同时,讲解了MongoDB的可视化工具Compass的使用,以及如何通过mongoose在Node.js中进行数据操作。
1.下载安装MongoDB
MongoDB官网:Download MongoDB Community Server | MongoDB
最后安装时将这个勾选去掉!!!
2.下载安装安装图形化界面软件Navicat
下载地址:https://dn.navicat.com.cn/download/navicat17_premium_lite_cs_x64.exe
3.Nodejs获取mongodb数据库的数据
(1)安装mongoose插件
npm i mongoose
(2)在项目种创建utils文件夹,里面创建db.js文件
const mongoose = require("mongoose");const connectDB = async () => {try {await mongoose.connect("mongodb://127.0.0.1:27017/unmannedAerialVehiclePipelineInspection");console.log("MongoDB连接成功");} catch (error) {console.log("连接数据库失败:", error);process.exit(1); // 退出进程}
};connectDB();
(3)找到app.js文件,引入db.js
// 处理项目中日志,第三方写好插件
var logger = require('morgan');//路由请求之前,连接数据库
require("./utils/db")
(4) 启动MongoDB连接
提供一些方式:
首先在环境变量-用户变量中,新增 path ---> D:\MongoDB\bin
方法一:配置文件方式启动服务
- 在MongoDB安装路径下,在bin同级新建conf文件夹;
- 在该文件中,用文件文档建立 mongod.conf文件
storage:#The directory where the mongod instance stores its data.Default Value is "\data\db" on Windows.dbPath: D:\MongoDB\data\db
dbPath的路径根据自己的路径来写!
方法二: Window 下安装 Mongodb 并设置为开机自启
- 在MongoDB文件下新建data 然后新建db 顺序是这样:D:\MongoDB\data\db
在
MongoDB下新建文件夹log
(存放日志文件),并且在里面新建文件mongodb.log
- 在MongoDB文件建立mongod.conf文本文档,内容如下:
systemLog:
destination: file
path: D:\MongoDB\log\mongod.log
logAppend: true
storage:
dbPath: D:\MongoDB\data\db
net:
bindIp: 127.0.0.1
port: 27017
4.在D:\MongoDB\bin 路径下,启动cmd命令框,输入命令!
sc.exe create MongoDB binPath=D:\MongoDB\bin\mongod.exe\" --service --config=\"D:\MongoDB\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
5. 启动完成后在任务管理器中可以看得
启动不成功!请参考以下文章!【亲身实践已解决】Windows无法启动MongoDB Server,错误:1053:服务没有及时响应启动或控制请求_错误1053 服务没有及时响应启动或控制请求-CSDN博客
三,后端MVC架构
项目根目录下文件
routes文件夹--->users.js
controllers文件夹--->UserController.js
models文件夹--->UserModel_DB.js
四,Node后端身份验证
1.搭建身份认证环境
(1)需要下载依赖引入jwt ;解决:生成token凭证
npm i jsonwebtoken express-jwt
# express-jwt这个中间件,目的就算为了验证token
(2)生成token
(3)UserController里面加入代码
const UserModel_DB = require("../models/UserModel_DB");
const Response = require("../utils/Response");
const Jwt = require("jsonwebtoken");
const { getEncAes128 } = require("../utils/crypto");class usercontroller {/*** 所有用户*/async alluser(req, res, next) {try {const data = await UserModel_DB.find();res.send(Response.success({ msg: "全部用户", data }));} catch (error) {console.log(error);res.send(Response.error({ msg: "数据传输失败" }));}}/*** 登录*/async login(req, res, next) {try {const { username, password } = req.body;// 传递了一个对象,按照传递对象去数据筛选// 将password进行同样加密,将结果放在数据库中寻找const newPassword = getMD5(password);const data = await UserModel_DB.find({username: username,password: newPassword,});console.log(data);if (data.length) {//生成身份凭证//第一个参数生成保存用户自己信息,//第二个参数screct密钥//设置过期时间,以s作为单位const token = jwt.sign({ username }, "shuangxiangbabai", {expiresIn: 60 * 60,});res.send(Response.success({ data: "Bearer " + token }));} else {res.send(Response.error());}} catch (error) {console.log(error);res.send(Response.error({ msg: "服务器报错" }));}}/*** 注册*/async register(req, res, next) {const { username, password, age, phone, avatar, gender } = req.body;if (username && password && age && phone && avatar && gender) {const result = getEncAes128(password);const data = await UserModel_DB.create({username,password: result,age,phone,avatar,gender,});if (data) {res.send(Response.success({ msg: "注册成功", data }));} else {res.send(Response.error({ msg: "注册失败" }));}} else {res.send(Response.error({ msg: "数据传输失败" }));}}/*** 修改密码*/async fixpsd(req, res, next) {try {const { id, newpassword } = req.body;const result = getEncAes128(newpassword);const data = await UserModel_DB.updateOne({ _id: id },{ password: result });if (data.acknowledged) {res.send(Response.success({ msg: "修改成功", data }));} else {res.send(Response.error({ msg: "修改失败" }));}} catch (error) {console.log(error);res.send(Response.error({ msg: "数据传输失败" }));}}/*** 根据token验证用户*/async UserInfo(req, res, next) {const token = req.get("Authorization");const obj = Jwt.verify(token.split(" ")[1], "baoyebabai");console.log(obj.username);const data = await UserModel_DB.find({ username: obj.username });console.log(data);res.send({ data });}
}module.exports = new usercontroller();
2.服务端验证token
(1) 在utils文件夹下面创建jwt.js文件
// 引入的一个函数
const {expressjwt} = require("express-jwt")//在进行token认证
const jwtAuth = expressjwt({secret:"shuangxiangbabai", //加密的密钥algorithms:["HS256"], //默认加密采用HS256credentialsRequired:true //true:不管请求有没有携带token,都需要验证,false:请求没有带token不验证
})module.exports = jwtAuth
(2)需要在app.js中引入jwt.js文件并加载中间件
//引入jwt认证代码
const jwtAuth = require("./utils/jwt")//指定项目中public为静态资源 ,这个文件夹里面资源前端直接访问
app.use(express.static(path.join(__dirname, 'public')));//先验证token
app.use(jwtAuth)
相关文章:
使用 Node、Express 和 MongoDB 构建一个项目工程
本文将详细介绍如何使用 Node.js Express MongoDB 构建一个完整的 RESTful API 后端项目,涵盖: 项目初始化 Express 服务器搭建 MongoDB 数据库连接 REST API 设计(CRUD 操作) 错误处理与中间件 源码结构与完整代码 部署建…...
基本元器件电阻、电容、电感的高频知识和大厂真题解析
本文首先举例分析各个方向的工程师如何定制化准备硬件岗位面试,各个击破; 然后根据实战经验总结硬件领域中电阻电容电感等的主要笔试、面试高频考题考点; 最后,列出最新最全的基本元器件笔试面试的真题和模拟题,供大家参考。 本专栏预计更新50期左右。当前第3期 一、硬件…...
Unity InputSystem触摸屏问题
最近把Unity打包后的windows软件放到windows触摸屏一体机上测试,发现部分屏幕触摸点击不了按钮,测试了其他应用程序都正常。 这个一体机是这样的,一个电脑机箱,外接一个可以触摸的显示屏,然后UGUI的按钮就间歇性点不了…...
分布式微服务架构,数据库连接池设计策略
在分布式微服务架构中,数据库连接池的设计远比单体应用复杂,涉及资源隔离、连接管理、性能调优和高可用等问题。下面是面向专业软件架构师的系统化分析与策略建议: 一、核心挑战 每个服务独立运行,连接池分散 每个微服务维护自己的…...
差分信号抗噪声原理:
差分信号抗噪声原理: 差分信号除了能很好地解决发送和接收参考点电位不同的问题外,差分信号的另一个重要优势就是在一定条件下其抗干扰能力比单端信号更强。对于单端信号传输,外界对它的干扰噪声直接叠加在信号上,接收端直接检测输…...
【数据分析】酵母实验多指标数据的 R 语言分析与可视化
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载必要的R包数据下载定义函数发育分析(development analysis)数据导入与预处理数据子集创建绘图模型分析两两比较生存分析(survival analysis)数据导入与预处理数据子集创建绘…...
AI | 最近比较火的几个生成式对话 AI
关注:CodingTechWork 引言 生成式对话 AI 正在迅速改变我们与机器交互的方式,从智能助手到内容创作,其应用范围广泛且深远。本文将深入探讨几款当前热门的生成式对话 AI 模型,包括 Kimi、DeepSeek、ChatGPT、文心一言、通义千问和…...
将视频生成视频二维码步骤
如何将视频链接生成二维码 生成与视频关联的二维码通常涉及以下几个方面:选择合适的库或工具、准备视频链接以及将其转换为二维码图像。以下是详细的说明: 使用JavaScript/Vue框架生成二维码 在前端开发中,可以使用 qrcode 或者 vue-qrcod…...
以安科瑞 EMS3.0 为依托,打造网荷储充一体化典范
在“双碳”目标与能源革命的浪潮中,安科瑞电气股份有限公司推出的EMS3.0微电网智慧能源平台,以“源-网-荷-储-充”全链路协同为核心,通过物联网、大数据与AI技术的深度融合,为企业提供了一套智能化、高效化、低碳化的能源管理解决…...
堆和二叉树--数据结构初阶(3)(C/C++)
文章目录 前言理论部分堆的模拟实现:(这里举的大根堆)堆的创建二叉树的遍历二叉树的一些其他功能实现 作业部分 前言 这期的话讲解的是堆和二叉树的理论部分和习题部分 理论部分 二叉树的几个性质:1.对于任意一个二叉树,度为0的节点比度为2的节点多一个 2.对于完全…...
CLIP和SimCLR集成到图像-文本检索系统技术实现步骤和部署方案(代码版)
将 CLIP(多模态对比学习)和 SimCLR(单模态对比学习)集成到 图像-文本检索系统(如搜索引擎、电子商务平台)的技术实现步骤和部署方案,结合代码示例与工程化思路: ### 一、技术实现核心步骤 1. 环境搭建与依赖安装 # 安装 PyTorch(支持 GPU 加速) pip install torch…...
R/G-B/G色温坐标系下对横纵坐标取对数的优势
有些白平衡色温坐标系会分别对横纵坐标取对数运算。 这样做有什么优势呢? 我们知道对数函数对0-1之间的因变量值具有扩展作用。即自变量x变化比较小时,经过对数函数作用后可以把因变量扩展到较大范围内,即x变化较小时,y变化较大,增加了识别数据的识别性。 由于Raw数据中的…...
Java开发工具IntelliJ IDEA v2025.1——全面支持Java 24、整合AI
IntelliJ IDEA 是由 JetBrains 开发的智能 Java IDE,提供代码自动补全、重构工具、框架集成(Spring/JPA 等)、数据库工具和调试支持,通过深度代码分析与跨语言功能优化企业级开发流程,被广泛认可为专业 Java 开发者的高…...
IDEA启动报错Failed to create JVM. JVM path的解决办法
今天修改了 IntelliJ IDEA 2023.1 的配置文件 idea64.exe.vmoptions 后启动报错: if you already hava a JDK installed, define a JAVA_HOME variable in Computer > Systen Properties > System Settings > Environment Variables.Failed to create JV…...
R语言中的常用内置函数
常用的数值函数 常用的字符函数 与概率分布相关的函数 有用的统计函数 数据来源:《数据挖掘与数据分析:基于R语言》王阳 2024年1月出版...
docker容器监控自动恢复
关于实现对docker容器监控以及自动恢复,这里介绍两种实现方案。 方案1: 实现思路: 找到(根据正则表达式)所有待监控的docker容器,此处筛选逻辑根据docker运行状态找到已停止(Exit)类…...
【记录手贱bug日常】IDEA 配置vmoptions后打不开,重新安装,删注册表均无用
今天早上来公司,闲着没事优化优化自己的"锄头"idea,然后想着看看idea用的啥垃圾回收器,后来手动改成了-XX:UseG1GC,满心欢喜觉得没什么问题,直接删除缓存重启,结果不出意料的出问题了,…...
STM32F407使用ESP8266实现阿里云OTA(中)
文章目录 前言一、程序分析二、程序讲解1. main函数2. Get_Version()函数3. esp_Init()函数4. Check_Updata()函数结语前言 从上一章STM32F407使用ESP8266实现阿里云OTA(上)中我们已经对连接阿里云和从阿里云获取升级包的流程非常的熟悉了。所以本章我们进行STM32的程序开发…...
如何利用快照与备份快速恢复服务器的数据
在服务器上利用**快照(Snapshot)**和**备份(Backup)**快速恢复数据,可显著减少停机时间并确保业务连续性。以下是具体操作步骤和最佳实践: --- ### **1. 快照(Snapshot)恢复** **适…...
【Leetcode 每日一题】2799. 统计完全子数组的数目
问题背景 给你一个由 正 整数组成的数组 n u m s nums nums。 如果数组中的某个子数组满足下述条件,则称之为 完全子数组 : 子数组中 不同 元素的数目等于整个数组不同元素的数目。 返回数组中 完全子数组 的数目。 子数组 是数组中的一个连续非空序…...
主流操作系统对比分析(macOS、Linux、Windows、Unix)
主流操作系统对比分析(macOS、Linux、Windows、Unix) 一、系统基本介绍 系统核心特点典型代表macOS苹果公司开发,基于 Unix(BSD),闭源,专为苹果硬件优化,强调用户体验和设计美学。m…...
Qt使用 SQLite 数据库的基本方法
在 Qt 中,使用 SQLite 数据库的基本方法与 MySQL 类似,但 SQLite 是一个轻量级的嵌入式数据库,通常不需要外部数据库服务器。你可以直接在本地磁盘上操作 SQLite 数据库文件。 1. 安装 SQLite 驱动 通常,Qt 默认包含了对 SQLite…...
【刷题系列】LeetCode消失的数字、轮转数组
文章目录 1、消失的数字1.1 题目描述1.2 题目分析 2、轮转数字2.1 题目描述2.2 题目分析 1、消失的数字 原题链接:消失的数字 1.1 题目描述 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗…...
Unreal Niagara制作SubUV贴图翻页动画
SubUV翻页动画是游戏中的常见功能,通过对每一小块UV进行移动可以模拟动画效果,接下来对下图进行SubUV动画的制作。 (金币测试图下载地址:https://download.csdn.net/download/grayrail/90684422) 最终效果如下: 1.…...
【C++】模版初阶:函数模板、类模板
文章目录 一、为什么要使用模板二、什么是函数模板1、函数模板(1)概念(2)格式(3)原理(4)函数模板的实例化(5)模板参数的匹配原则 2、类模板(1&…...
Kotlin基础知识全面解析(下)
文章目录 第六章:集合与函数式编程6.1 集合概述6.2 集合操作6.3 序列 第七章:协程与异步编程7.1 协程基础7.2 挂起函数7.3 异步与等待7.4 协程上下文与调度器 第八章:Kotlin标准库8.1 作用域函数let函数run函数with函数apply函数also函数 8.2…...
NVIDIA高级辅助驾驶安全报告解析
近期参加了NVIDIA高级辅助驾驶开发者实验室,读了NVIDIA的高级辅助驾驶安全报告白皮书,里面涉及了不少有意思的内容,大致分享下英伟达在高级辅助驾驶领域的安全性上的工作。 最令人印象深刻的是NVIDIA提出的"四大支柱"架构&#x…...
HarmonyOS:一多能力介绍:一次开发,多端部署
概述 如果一个应用需要在多个设备上提供同样的内容,则需要适配不同的屏幕尺寸和硬件,开发成本较高。HarmonyOS 系统面向多终端提供了“一次开发,多端部署”(后文中简称为“一多”)的能力,可以基于一种设计…...
位运算题目:解码异或后的排列
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:解码异或后的排列 出处:1734. 解码异或后的排列 难度 6 级 题目描述 要求 有一个整数数组 perm \texttt{perm} perm,是前…...
elasticsearch查询中的特殊字符影响分析
大家先看一个执行的dsl 查询sql,大致的意思是排除某些分类下的商品 GET /productinfos/_search {"from": 0,"query": {"bool": {"must": [{"exists": {"field": "minprice"}},{"bool": {&qu…...
Django创建的应用目录详细解释以及如何操作数据库自动创建表
创建好Django项目后 如果要创建 python manage.py startapp 模块名模块 使用 我创建一个system模块后是 注意:urls是我自己建的文件 1.migrations目录 存放数据库的迁移文件,当models.py中模型定义发生变化时,通过迁移操作能同步数据库结构变化 __init__ 使该目录…...
Visual Studio Code 使用tab键往左和往右缩进内容
使用VSCode写东西,经常遇到多行内容同时缩进的情况,今天写文档的时候就碰到,记录下来: 往右缩进 选中多行内容,点tab键,会整体往右缩进: 往左缩进 选中多行内容,按shifttab&am…...
数据结构算法复杂度介绍
数据结构:互相之间存在一种或者多种特定元素的集合,在逻辑上分为线性结构,散列结构,、树形结构、图形结构等。 算法:求解具体问题的步骤描述,代码上表现出来是解决特定问题的一组有限的指令序列。简单来说…...
SiamMask中的分类分支、回归分支与Mask分支,有何本质差异?
SiamMask中的分类分支、回归分支与Mask分支,有何本质差异? 一、引言二、分支定位与任务目标三、网络结构与感受野设计3.1 分类分支(Classification Head)3.2 回归分支(Regression Head)3.3 Mask分支&#x…...
使用 Typora + PicGo + Gitee/GitHub 构建 Markdown 图床技术方案
使用 Typora PicGo Gitee/GitHub 构建 Markdown 图床技术方案 AuthorDateVersionNoteTao Wang2025-04-24V1.0Release the document. 文章目录 使用 Typora PicGo Gitee/GitHub 构建 Markdown 图床技术方案前言核心概念解析图床技术原理 环境搭建基础工具清单软件安装流程 …...
问道数码兽 怀旧剧情回合手游源码搭建教程(反查重优化版)
本文将对"问道数码兽"这一经典卡通风格回合制手游的服务端部署与客户端调整流程进行详细拆解,适用于具备基础 Windows 运维和手游源码调试经验的开发者参考使用。教程以实战为导向,基于原始说明内容重构优化,具备较高的内容查重避重…...
Electron Forge【实战】百度智能云千帆大模型 —— AI聊天
1. 获取 Access Key 与 Secret Key 登录百度智能云 https://login.bce.baidu.com/ 2. 安装node.js sdk npm install baiducloud/qianfan3. src/main.ts import { setupIPC } from "./ipc";在 const mainWindow 之后 setupIPC(mainWindow);4. src/ipc.ts import { ipc…...
机器人操作中的生成式 AI:综述(下)
25年3月来自香港大学、香港理工、香港科大、浙大和清华大学的论文“Generative Artificial Intelligence in Robotic Manipulation: A Survey”。 本综述全面回顾机器人操作领域生成学习模型的最新进展,并探讨该领域的关键挑战。机器人操作面临着关键瓶颈ÿ…...
把一个 PyTorch 的图像张量转换成 NumPy 格式,并按照正确的维度顺序显示出来
示例代码: plt.imshow(np.transpose(tensor_denorm.numpy(), (1, 2, 0)))它的作用是:把一个 PyTorch 的图像张量转换成 NumPy 格式,并按照正确的维度顺序显示出来。 🚀 一步步解释: ✅ tensor_denorm 这是一个形状为…...
windows上的RagFlow+ollama知识库本地部署
一、 docker的安装与部署 1. 下载Docker Desktop 访问Docker官网并下载适用于Windows的Docker Desktop安装程序。 RagFlow对docker的要求: Docker ≥ 24.0.0 & Docker Compose ≥ v2.26. docker 下载地址: https://www.docker.com/ Get Docker | D…...
【docker】 pull FROM build
镜像拉取失败 token问题 DeadlineExceeded: failed to fetch anonymous token Get "https://auth.docker.io/token?...": dial tcp 157.240.20.8:443: i/o timeout1. 检查网络连通性 如果 curl 命令卡住或超时,说明网络到 Docker Hub 存在问题。 ping regt-1.doc…...
【数据分析实战】使用 Matplotlib 绘制玫瑰图
🌹 1、简述 玫瑰图,又称极坐标柱状图(Polar Bar Chart),是一种特殊的条形图,适用于展示方向型数据,例如: 风向频率图(Wind Rose)每月、每日不同类别统计圆形时间序列展示(如12个月销售量分布)在本篇博客中,我们将使用 matplotlib 画出玫瑰图,包括基本玫瑰图、多…...
第十四届蓝桥杯省B.砍树
第十四届蓝桥杯省B.砍树 题目 题目解析及思路 考虑一对无序数对的点 x和 y,如果我们砍掉某条边可以让这两个点不连通,那么这条边一定是从 x到 y 路径上的一点,我们可以让从 x到 y 路径的边权值都加1。这个操作我们可以使用树上差分。 对于 …...
windows安装Mysql
一、删除已安装的MySQL服务 1、查找以前是否装有mysql sc query mysql 无结果,说明未安装过mysql或者已经卸载mysql服务,接下来直接安装mysql即可,否则需要删除之前安装的mysql 2、删除mysql 以管理员模式打开命令运行行,运行下…...
Axure大屏可视化模板:多领域数据决策的新引擎
在数据驱动决策的时代,Axure大屏可视化模板凭借交互性与可定制性,成为农业、园区管理、智慧城市、企业及医疗领域的创新工具,助力高效数据展示与智能决策。 核心应用场景 1. 农业精细化:实时监控土壤湿度、作物生长曲线&#x…...
【产品经理从0到1】原型及Axure介绍
原型分类 原型的三种分类: 草图原型:⼿绘稿,制作⽅便,修改不⽅便;低保真原型:简单交互,⽆设计图; 最好的原型是⿊⽩灰的;⾼保真原型:复杂交互,有…...
【激光雷达3D(7)】CenterPoint两阶段细化仅使用BEV特征;PV-RCNN两阶段细化使用体素特征;M3DETRTransformer统一多表征特征
文章目录 1. CenterPoint的两阶段细化模块仅使用鸟瞰视角(BEV)特征2 PV-RCNN 两阶段3 M3DETR(假设为类似DETR的3D检测器) 1. CenterPoint的两阶段细化模块仅使用鸟瞰视角(BEV)特征 CenterPoint的两阶段细化…...
C# 音频分离(MP3伴奏)
编程语言:C# 库:NAudio NAudio 是一个开源的 .NET 音频处理库,它为开发者提供了丰富的功能,能在 Windows 平台上方便地进行音频的录制、播放、处理等操作。以下是关于 NAudio 库的详细介绍: 主要特性 多格式支持&am…...
JavaScript性能优化实战(4):异步编程与主线程优化
JavaScript单线程模型与事件循环深入理解 JavaScript作为一种单线程语言,其执行模型与传统多线程编程语言有着根本性的差异。这种单线程特性既是JavaScript的局限,也是其简洁性的来源。深入理解JavaScript的单线程模型和事件循环机制,对于编写高性能的异步代码至关重要。 …...
Control Center安卓版:自定义控制中心,提升手机操作体验
在使用智能手机的过程中,许多用户希望能够更加便捷地访问常用功能和工具,提升操作效率。今天,我们要介绍的 Control Center安卓版,就是这样一款功能强大的手机控制软件。它不仅提供了简便的操作方法,还允许用户自定义操…...