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

news2024/12/24 11:46:36

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表示一个列表
*/

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

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

相关文章

Java线程池运行原理,线程池源码解读【Java线程池学习二】

一、前奏 有了上一篇博文的学习&#xff0c;相信你对于线程池的使用这块已经不在存在什么问题了&#xff0c;日常开发和面试也都足够了。 线程池最优使用策略【Java线程池学习一】 但随着时间的推移在闲下来的时候我突然想&#xff0c;当任务进入了队列之后是怎么取出来的呢…

linux系统根文件系统构建

根文件系统构建 一、根文件系统简介 根文件系统是 Linux 内核启动以后挂载(mount)的第一个文件系统&#xff0c;从根文件系统中读取初始化脚本&#xff0c;比如 rcS&#xff0c;inittab 等。根文件系统和 Linux 内核是分开的&#xff0c;单独的 Linux 内核是没法正常工作的&a…

快捷获取GDI+绘图参数的两种经验方案

文章目录一、使用系统的枚举二、专用枚举1、颜色Color2、字体Font3、字体名称4、笔刷Brush5、笔Pen6、矩形Rectangle7、点Point8、大小Size文章出处&#xff1a; https://blog.csdn.net/haigear/article/details/129085403在绘图中&#xff0c;常常需要给出颜色&#xff0c;字体…

目标检测各常见评价指标详解

注&#xff1a;本文仅供学习&#xff0c;未经同意请勿转载 说明&#xff1a;该博客来源于xiaobai_Ry:2020年3月笔记 对应的PDF下载链接在&#xff1a;待上传 目录 常见的评价指标 准确率 &#xff08;Accuracy&#xff09; 混淆矩阵 &#xff08;Confusion Matrix&#xff…

SpringBoot实现统一返回接口(除AOP)

起因 关于使用AOP去实现统一返回接口在之前的博客中我们已经实现了&#xff0c;但我突然突发奇想&#xff0c;SpringBoot中异常类的统一返回好像是通过RestControllerAdvice 这个注解去完成的&#xff0c;那我是否也可以通过这个注解去实现统一返回接口。 正文 这个方法主要…

Django框架之模型视图--HttpResponse对象

HttpResponse对象 视图在接收请求并处理后&#xff0c;必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建&#xff0c;HttpResponse对象由开发人员创建。 1 HttpResponse 可以使用django.http.HttpResponse来构造响应对象。 HttpResponse(content响应体, con…

【opencv源码解析0.2】opencv库源码编译

如何编译opencv库源码 大家好&#xff0c;我是周旋&#xff0c;感谢大家学习【opencv源码解析】系列&#xff0c;本系列首发于公众号【周旋机器视觉】。 上篇文章我们介绍了如何配置opencv环境&#xff0c;搞清了opencv的包含目录include、静态库链接以及动态库链接的作用。 【…

(考研湖科大教书匠计算机网络)第五章传输层-第四节:TCP流量控制

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;流量控制概述二&#xff1a;流量控制举例三&#xff1a;拓展阅读&#xff08;可不看&#xff09;&#xff08;1&#xff09;TCP流量控制完整例子&a…

马上卸载这个恶心的软件!

大家好&#xff0c;我是良许。 春节已经过完了&#xff0c;但在这喜庆的日子里&#xff0c;又有一个小丑在上窜下跳了。 没错&#xff0c;这个不要脸的小丑依然还是 Notepad 的作者。 好好的一个开发者&#xff0c;为何老喜欢整一些有得没得的东西&#xff1f;好好搬砖写代码…

pygame8 扫雷游戏

一、游戏规则&#xff1a; 1、点击方格&#xff0c;如果是地雷&#xff0c;游戏失败&#xff0c;找到所有地雷游戏胜利 2、如果方块上出现数字&#xff0c;则表示在其周围的八个方块中共有多少颗地雷 二、游戏主逻辑&#xff1a; 主要逻辑即调用run_game, 然后循环检测事件…

云计算|OpenStack|社区版OpenStack---基本概念科普(kvm的驱动类别和安装)

前言&#xff1a; 云计算里基本都是基于kvm技术作为底层支撑&#xff0c;但&#xff0c;该技术是比较复杂的&#xff0c;首先&#xff0c;需要硬件的 支撑&#xff0c;表现在物理机上&#xff0c;就是需要在BIOS中调整设置虚拟化功能&#xff0c;这个虚拟机功能通常是interVT或…

Fastjson2基础使用以及底层序列化/反序列化实现探究

1 Fastjson2简介 Fastjson2是Fastjson的升级版&#xff0c;特征&#xff1a; 协议支持&#xff1a;支持JSON/JSONB两种协议部分解析&#xff1a;可以使用JSONPath进行部分解析获取需要的值语言支持&#xff1a;Java/Kotlin场景支持&#xff1a;Android8/服务端其他特性支持&a…

python基础知识有哪些需要背(记住是基础知识)我是初学者

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;一个有趣的事情&#xff0c;一个有趣的事情&#xff0c;今天让我们一起来看看吧&#xff01; 1、python基础知识有哪些需要背&#xff08;记住是基础知识&#xff09;我是初学者 或看好Python的广阔前景&#xff0c;或…

RabbitMQ 入门到应用 ( 五 ) 应用

6.更多应用 6.1.AmqpAdmin 工具类 可以通过Spring的Autowired 注入 AmqpAdmin 工具类 , 通过这个工具类创建 队列, 交换机及绑定 import org.springframework.amqp.core.AmqpAdmin; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.Di…

python基于django微信小程序的适老化老人健康预警小程序

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, 适老化老人健康预警微信小程序就是信息时代变革中的产物之一。 任何系统都要遵…

Spring国际化实现

Java国际化 Java使用Unicode来处理所有字符。 Locales 国际化主要涉及的是数字、日期、金额等。 有若干个专门负责格式处理的类。为了对格式进行控制&#xff0c;可以使用Locale类。它描述了&#xff1a; 一种语言一个位置(通常包含)一段脚本(可选&#xff0c;自Java SE7开…

CMMI之需求开发流程

需求开发&#xff08;Requirement Development, RD&#xff09;的目的是通过调查与分析&#xff0c;获取用户需求并定义产品需求。需求开发过程域是SPP模型的重要组成部分。本规范阐述了需求开发过程域的两个主要规程&#xff1a; 需求调查 [SPP-PROC-RM-SURVEY] 需求定义 [SPP…

消失的数字【C语言】

题目&#xff1a; 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 解法&#xff1a; int missingNumber(int* nums, int numsSize){int val0;for(int i0;i<numsSize;i){val^nums[i];}fo…

Vue3之条件渲染

1.何为条件渲染 条件渲染就是在指定的条件下&#xff0c;渲染出指定的UI。比如当我们显示主页的时候&#xff0c;应该隐藏掉登录等一系列不相干的UI元素。即UI元素只在特定条件下进行显示。而在VUE3中&#xff0c;这种UI元素的显示和隐藏可以通过两个关键字&#xff0c;v-if 和…

Qt动画框架详解

目录1.前言2.原理3.属性动画4.并行执行的动画5.顺序执行的动画6.扩展属性动画支持的数据类型1.前言 为软件适当的添加一些动画&#xff0c;能够提高软件的用户体验。在使用Qt框架开发软件时&#xff0c;我们可以用Qt提供的动画框架来为QWidget等UI元素添加动画效果。本文从动画…