当前位置: 首页 > news >正文

nodejs学习-4:nodejs连接mongodb和相关操作

1. express生成器生成express模板

前提需要首先下载好:express-generator,命令如下(全局安装)

npm install -g express-generator

生成模板命令如下:

express 项目名称 --view=ejs
// --view 参数表示前端界面使用的引擎,这里使用ejs

这只是一个模板,模板下需要模块还需要重新下载,为此,需要用cd命令来到当前项目的目录下,输入命令:npm i 下载好相关模块。

2. 连接mongodb数据库

首先,前提是先下载好mongodb数据库,用nodejs连接mongodb数据库需要下载好一个模块。
首先,命令窗口下来到当前项目的目录,输入如下命令即可。

npm i mongoose

在当前项目的目录下新建config文件夹,表示这个文件夹下的文件为项目的相关配置文件。
请添加图片描述
这里db.config.js文件为mongodb连接配置文件,db.config.js里的代码如下:

const mongoose = require('mongoose');mongoose.connect('mongodb://127.0.0.1:27017/liuzeTest');
// 连接mongodb数据库 liueTest 表示在mongodb数据库中新建liuzeTest数据库

之后打开bin文件下的www文件,加入如下代码,表示引入数据模块。
请添加图片描述

// 引入数据库模块
require('../config/db.config')

3. 启动服务器,实现mongodb的增删改查

在当前项目目录下,输入命令:npm start,这样项目就启动了,但是代码一改动,就又得输入这个命令,为了避免这样重复的操作,可以修改当前项目下package.json文件,修改如下:
请添加图片描述
请添加图片描述
或者这样也可以:

"scripts": {"start": "nodemon ./bin/www"},

前提是需要下载好node-dev和nodemon。
操作mongodb数据库另外需要提前构建好相应的模型,为了新建文件夹model(图片上小编写错了),在这个文件夹下构建相应的js模型文件即可。
请添加图片描述
请添加图片描述
写了一个简单的注册、修改、删除、查询代码(不符合项目的业务逻辑,只是为了演示操作而已)

3.1. 增加

后端js代码:

router.post('/user/add',(req,res)=>{console.log(req.body);const {username,password} = req.body;userModel.create({username,password}).then((data)=>{console.log(data);});res.send({ok:1});
})

前端请求代码如下:

postBtn.onclick = ()=>{fetch('/api/user/add',{method:'post',body:JSON.stringify({username:username.value,password:password.value}),headers:{'Content-Type':'application/json'}}).then((res)=>{return res.json();}).then((res)=>{console.log(res);})}// 注册按钮点击

运行结果:
请添加图片描述
请添加图片描述

3.2 修改

后端js代码(根据_id值进行修改):

router.post('/user/update/:id', (req, res) => {console.log(req.body,req.params.id);const {username,password} = req.body;userModel.updateOne({_id:req.params.id},{username,password}).then((data)=>{res.send({ok: 1});});
})

前端请求代码如下:

updateBtn.onclick = ()=>{fetch('/api/user/update/63f188370691942759591324',{method:'post',body:JSON.stringify({username:username.value,password:password.value}),headers:{"Content-Type":'application/json'}}).then((res)=>{return res.json();}).then((res)=>{console.log(res);})}// 更新按钮点击

运行结果:
请添加图片描述
请添加图片描述

3.3 删除

后端js代码(根据_id值进行删除):

router.get('/user/del/:id', (req, res) => {userModel.deleteOne({_id:req.params.id}).then(function(data){res.send({ok:1});})
})

前端请求代码如下:

delBtn.onclick = function(){fetch('/api/user/del/63f188370691942759591324').then(res=>res.json()).then(res=>{console.log(res);})
}
// 删除按钮点击
3.4 查询

后端js代码:

router.get('/user/list',(req,res)=>{userModel.find({},['username']).then(data=>{res.send(data);})/*userModel.find({}, ['username']).sort({age:-1}).skip().limit().then(data => {res.send(data);})根据年龄进行排序 当前为降序skip(0) limit(10) 同[0:10]*/
})

前端请求代码如下:

fetch('/api/user/list')
.then(res=>res.json())
.then(res=>{let str_s = '';res.forEach(ele=>{str_s += `<tr><td>${ele._id}</td><td>${ele.username}</td></tr>`;})tbody_.innerHTML = str_s;
})
userModel.find()
// find() 参数没有表示查询所有数据
// find({},['username']) // 表示只查询username这个字段的所有数据信息.sort()
/*
排序
如参数为{age:1} 表示按照年龄升序排序
{age:-1} 表示按照年龄降序排序
*/.skip() .limit()
/*
用于分页查询使用,两个函数应该一起使用,类似切片操作
.skip(0).limit(10)  好比python中 list2[0:10]
.skip(10).limit(20) 好比python中 list2[10:20]
list2表示一个列表
*/

相关文章:

nodejs学习-4:nodejs连接mongodb和相关操作

1. express生成器生成express模板 前提需要首先下载好&#xff1a;express-generator&#xff0c;命令如下(全局安装) npm install -g express-generator生成模板命令如下&#xff1a; express 项目名称 --viewejs // --view 参数表示前端界面使用的引擎&#xff0c;这里使用…...

【博客629】Linux DNS解析原理与配置

Linux DNS解析原理与配置 1、DNS缓存 作用&#xff1a; 程序客户端、下游的 DNS 服务器每次查询 DNS 成功之后&#xff0c;通常会将该 DNS 记录缓存一段时间&#xff0c;避免频繁发出查询请求的耗时。 Linux下的DNS缓存&#xff1a; Linux 系统默认不会在本地建立 DNS 缓存…...

【CSP】202212-2 训练计划

题目 问题背景 西西艾弗岛荒野求生大赛还有 天开幕&#xff01; 问题描述 为了在大赛中取得好成绩&#xff0c;顿顿准备在 天时间内完成“短跑”、“高中物理”以及“核裂变技术”等总共 项科目的加强训练。其中第 项&#xff08; &#xff09;科目编号为 &#xff0c;也可简…...

java基础学习 day42(继承中构造方法的访问特点,this、super的使用总结)

继承中&#xff0c;构造方法的访问特点 父类的构造方法不会被子类继承&#xff0c;但可以通过super()调用父类的构造方法&#xff0c;且只能在子类调用&#xff0c;在测试类中是不能手动单写构造方法的。子类中所有的构造方法默认先调用父类的无参构造&#xff0c;再执行自己构…...

生物医药多组学与生物信息方法介绍

基因组学告诉你可能发生什么&#xff0c;转录组学和蛋白组学告诉你即将发生什么&#xff0c;而代谢组学告诉你正在发生什么 1、多组学与生信方法 生物医学技术的组学包括基因组学、转录组学、蛋白质组学、代谢组学和表观基因组学等。这些组学研究领域通过大量数据的高通量技术…...

3|物联网控制|计算机控制-刘川来胡乃平版|第2章:计算机控制系统中的检测设备和执行机构-2.2过程控制中常用的执行器|课堂笔记|ppt

...

【进阶篇】线程的硬件基础

文章目录高速缓存缓存一致性协议写缓冲区和无效化队列高速缓存 简介 高速缓存是主内存与处理器之间的硬件&#xff0c;其容量小于主存&#xff0c;但存取速率远高于主存。因此处理器在执行读写操作时&#xff0c;可直接和高速缓存交互&#xff0c;提高响应速度。 我们常见的变…...

关于 ISP Tuning的学习,分享几点看法

关于学习&#xff0c;分享几点看法&#xff0c;欢迎讨论 。1、分阶段性的&#xff0c;阶梯式学习。2、带目的性的&#xff0c;任务式学习。3、有总结性的&#xff0c;输出式学习。如上3条&#xff0c;可以依次循环去执行&#xff0c;下面我以 ISP Tuning 的学习为例&#xff0c…...

RocketMQ源码阅读

没有用过rocketmq&#xff0c;但是一直对RocketMQ的实现很感兴趣&#xff0c;本次阅读源码基于5.0.0 一、 nameserver 通过源码阅读发现&#xff0c;它的作用主要是当作一个注册中心&#xff0c;注册broker、topic等信息&#xff0c;维护topic以及broker队列的路由信息&#…...

重磅 | 小O软件新品【鲸鱼地图】发布

千呼万唤始出来.......&#xff0c;小O系列软件又添新品【鲸鱼地图】&#xff01;&#xff01;&#xff01; 2023年新年伊始&#xff0c;小O就投入到新品研发工作中&#xff0c;秉承“发现地理价值”理念&#xff0c;为用户提供更加好用、易用的地图软件产品&#xff0c;经过春…...

软考高级信息系统项目管理师系列之二十五:项目合同管理

软考高级信息系统项目管理师系列之二十五:项目合同管理 一、项目合同管理内容整理一、合同管理基本概念1.项目合同管理定义2.合同的分类3.合同类型选择4.合同内容二、合同管理过程1.合同管理过程的内容2.合同签订和履行管理3.合同变更和档案管理4.合同违约索赔管理项目合同管理…...

测试开发之Django实战示例 第十三章 上线

在上一章&#xff0c;为其他程序与我们的Web应用交互创建了RESTful API。本章将学习如何创建生产环境让我们的网站正式上线&#xff0c;主要内容有&#xff1a;配置生产环境创建自定义中间件实现自定义管理命令1创建生产环境现在该将Django项目正式部署到生产环境中了。我们将按…...

python实战应用讲解-【语法基础篇】Python中的数值类型(附示例代码)

目录 前言 数值类型 十六进制、八进制和二进制 Python 数值类型转换 数值和表达式 前言...

Git常用命令以及如何在IDEA中使用Git

前言Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、xml文件、html页面等&#xff09;。Git在管理文件过程中会记录日志&#xff0c;方便回退到历史版本&#xff1b;Git存在分支的概念&#xff0c;一个项目可以有多个分支&…...

音乐播放器-- 以及数据库数据存储

运行环境 &#xff1a; java1.8 数据库以及代码编写工具 &#xff1a; sqlserver -- mysql 也可以 工具 eclipse 编码gbk窗体 &#xff1a; Swing使用了jaudiotagger 进行了音乐处理 图片展示 ----- 空闲时间 做出来玩的项目 部分功能还没有完善 完善了的功能 音乐 /// 主页 &a…...

[JAVA安全]Spring Messaging之CVE-2018-1270

漏洞简介 Spring 框架中通过spring-messaging 模块来实现 STOMP &#xff08;Simple Text-Orientated Messaging Protocol&#xff09;,STOMP是一种封装 WebSocket的简单消息协议。攻击者可以通过建立WebSocket连接并发送一条消息造成远程代码执行&#xff0c; spring-messagin…...

CAN通信笔记-位时间、Tq及采样点同步

本文框架1.前言2. 位时间2.1 位时间定义2.2 位时间计算3. Tq3.1 Tq的计算3.1.1 举个例子3.2 位时间与Tq的换算4. 采样点同步4.1 硬同步4.2 重同步4.2.1 延长PBS1的重同步4.2.2 缩短PBS2的重同步1.前言 本篇记录些关于CAN的一些学习笔记&#xff0c;说实话CAN协议发展的已经非常…...

玩转 Kubernetes 配置管理:ConfigMap 和 Secret 实战演示

目录一、简介二、ConfigMap2.1 基于目录创建 ConfigMap2.2 基于文件创建 ConfigMap2.3 从环境文件创建 ConfigMap2.4 定义从文件创建 ConfigMap 时要使用的键2.5 根据字符串创建 ConfigMap三、Secret3.1 基于文件创建Secret3.2 基于字符串创建Secret3.3 yaml文件方式创建secret…...

Kubernetes

一、 kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应用程序定义…...

从零开始 verilog 以太网交换机(三)MAC发送控制器的设计与实现

从零开始 verilog 以太网交换机&#xff08;三&#xff09;MAC发送控制器的设计与实现 &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f9e8; 从零开始 verilog 以太网交换机系列专栏&#xff1a;点击这里 &#x1f511;未经作者允…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...