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方法内需要对页面进行重新的渲染,否则需要手动刷新页面)
总结:
本文章只针对于作者对知识的回顾与复习,有疑问可以私信,有错误欢迎评论,后续会对图片的上传、图片显示、无限极分类进行发布