express配合mongodb实现增删改查

1.express的简介

express是node.js是平台的Web应用程序框架,通过提供多种HTTP实用工具和中间件,可以快速、轻松地创建各种Web应用。

2.创建数据库的连接

下载mongodse

npm i mongoose

然后在根目录创建一个model文件夹,model文件夹中包含db.js和model.js

let mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1:27017/数据库名")
let conn = mongoose.connection
conn.on("open",()=>{
    console.log("数据库连接成功");
})
conn.on("error",()=>{
    console.log("数据库连接失败");
})
module.exports = mongoose

注意数据库名,如果重复的话就会连接我们已有的数据库

最后的module.exports用来对mongoose中进行暴露

2.创建表

let mongoose = require("./db")
let goods = new mongoose.Schema({
    title:String,
    price:Number,
})
let goodsModel = mongoose.model("real", realSchema, "real")
module.exports = { goodsModel }

这里定义的mongoose是我们db中暴露的mongoose,也就是说这个表是创建在我们连接的数据库中

mongoose.model中的三个参数(模型的名称,模式(Schema),集合的名称)

最后将创建的model进行暴露

3.routes中引入的操作

let {goodsModel} = require("../model/model")

将goodsModel从model中的model文件中引入进来,goodsModel就可以访问到我们的数据库中的表

4.获取数据表中的数据

后端代码:
router.get('/getgoods',async(req,res)=>{
  let data = await goodsModel.find()
  res.send({
    data
  })
})

这里使用async和await的方式来解决回调地狱的问题

find()方法是mongoose中查找数据的一种方式,查到数据后用data来接收

最后通过res中的send方法将data返回给前端

前端接口:
axios.get('http://127.0.0.1:3000/getgoods').then(data=>{
    console.log(data.data.data)
})

前端可以通过axios.get来访问这个接口,这里使用then的方式来处理毁掉地狱,data参数用来接收后端发送的data

(在then方法内需要对页面进行重新的渲染,否则需要手动刷新页面)

5.实现新增

后端代码:
router.post('/addgoods', async function(req, res) {
  await goodsModel.create(req.body)
  res.send({
    code:200,
    msg:"添加成功"
  })
});

create是mongoose中的新建数据的方法,注意里边的参数,req.body

req.body是从我们我们客户端使用post、put等方法时携带的值

前端接口:
axios.get('http://127.0.0.1:3000/addgoods',list).then(()=>{
       
})

这里需要注意list是一个对象的形式

list也可以替代为{title:title,price:price}第一个title和price后端通过req.body访问的名称,例如req.body.title就可以访问到我们前端发送过来的title,第二个title和price为我们前端定义的参数

(在then方法内需要对页面进行重新的渲染,否则需要手动刷新页面)

6.实现删除

后端代码:
router.post("/delgoods",async(req,res)=>{
  let {_id} = req.body
  await goodsModel.deleteOne({_id:_id})
  res.send({
    code:200
  })
})

在这里使用结构赋值的方式将前端传递过来的_id进行接收,之后使用deleteOne的方式,先进行筛选的操作,找到_id相同的一条数据进行删除

这里的deleteOne方法中的第一个_id为数据库中字段的_id,第二个_id为前端传递过来的_id(要与前端传递过来的对象的键对应)

前端接口:
axios.post('http://127.0.0.1:3000/delgoods',{_id:id}).then(()=>{
       
})

这里的_id是向后端发送的键,id为前端的变量也就是值

(在then方法内需要对页面进行重新的渲染,否则需要手动刷新页面)

第二种方式:

后端代码:
router.post("/delgoods",async(req,res)=>{
  let {_id} = req.query
  await goodsModel.deleteOne({_id:_id})
  res.send({
    code:200
  })
})

这里使用了req.query的方式,这个方法可以访问到我们前端访问后端接口时,url中的参数

前端接口:
axios.post('http://127.0.0.1:3000/delgoods?_id='+id).then(()=>{
       
})

第二种方式与第一种不同的地方就是,第一种是在body中进行传值,第二种是在url中进行传值

?之后的内容为我们的参数,_id也就可以理解为我们的键注意这里的=号,url传参要复合我们url中的传参方式使用=赋值,因为在引号内不能直接访问我们的变量,所以在这里使用+进行拼接

(在then方法内需要对页面进行重新的渲染,否则需要手动刷新页面)

7.实现修改

后端代码:
router.post("/editgoods",async(req,res)=>{
  let body = req.body
  await goodsModel.updateOne({_id:body._id},body)
  res.send({
    code:200
  })
})

使用updateOne方法来进行一条数据的修改,第一个参数为筛选条件获取到body中的_id进行与数据库中的对比,第二个为修改的内容,解释下来就是找到_id相同的数据,然后进行替换

前端接口:
axios.post('http://127.0.0.1:3000/editgoods',list).then(()=>{
       
})

list为一个对象,其中要包含一个_id的字段,因为后端是使用body._id的方式,所以list中id的键应为_id,其他的键值可以根据自身需求进行更改

(在then方法内需要对页面进行重新的渲染,否则需要手动刷新页面)

8.实现查找

后端代码:
router.get('/search',async(req,res)=>{
  let data = await goodsModel.find({title:{$regex:req.query.title}})
  res.send({
    data
  })
})

依然是使用find方法,可以在find中添加条件,$regex是查询操作符之一,用于正则表达式的匹配,可以理解为,如果数据库中的title包含前端发送过来的title中的字符串,条件就会达成,就会将数据进行赋值给data

前端代码:
axios.get('http://127.0.0.1:3000/search?title='+title).then(()=>{
       
})

根据后端代码,后端中使用了req.query方式也就是说我们前端需要通过url的方式进行传参,所以这里使用了url对title进行了拼接

如果想要使用body方法,可以借鉴实现删除中的代码,自行更改

(在then方法内需要对页面进行重新的渲染,否则需要手动刷新页面)

总结:

        本文章只针对于作者对知识的回顾与复习,有疑问可以私信,有错误欢迎评论,后续会对图片的上传、图片显示、无限极分类进行发布

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值