当前位置: 首页 > 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表示一个列表
*/
http://www.lryc.cn/news/12594.html

相关文章:

  • 【博客629】Linux DNS解析原理与配置
  • 【CSP】202212-2 训练计划
  • java基础学习 day42(继承中构造方法的访问特点,this、super的使用总结)
  • 生物医药多组学与生物信息方法介绍
  • 3|物联网控制|计算机控制-刘川来胡乃平版|第2章:计算机控制系统中的检测设备和执行机构-2.2过程控制中常用的执行器|课堂笔记|ppt
  • 【进阶篇】线程的硬件基础
  • 关于 ISP Tuning的学习,分享几点看法
  • RocketMQ源码阅读
  • 重磅 | 小O软件新品【鲸鱼地图】发布
  • 软考高级信息系统项目管理师系列之二十五:项目合同管理
  • 测试开发之Django实战示例 第十三章 上线
  • python实战应用讲解-【语法基础篇】Python中的数值类型(附示例代码)
  • Git常用命令以及如何在IDEA中使用Git
  • 音乐播放器-- 以及数据库数据存储
  • [JAVA安全]Spring Messaging之CVE-2018-1270
  • CAN通信笔记-位时间、Tq及采样点同步
  • 玩转 Kubernetes 配置管理:ConfigMap 和 Secret 实战演示
  • Kubernetes
  • 从零开始 verilog 以太网交换机(三)MAC发送控制器的设计与实现
  • 使用vector<char>作为输入缓冲区
  • 自己在网站搭建用到的一些网站
  • XLSReadWriteII5 Color 颜色l的调用和使用
  • RT-Thread SP使用教程
  • LeetCode 2363. 合并相似的物品
  • numpy 中常用的数据保存、fmt多个参数
  • 从0到1一步一步玩转openEuler--19 openEuler 管理服务-特性说明
  • 23美赛E题:光污染(ICM)完整思路Python代码
  • 快速排序的描述以及两种实现方案
  • 算力引领 数“聚”韶关——第二届中国韶关大数据创新创业大赛圆满收官
  • MySQL 记录锁+间隙锁可以防止删除操作而导致的幻读吗?