express学习梳理

1、项目搭建

  • 安装node
  • 进入项目目录
  • 终端输入 npm i express

2、路由

const express  = require("express");
const app=express();
// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',function(req,res){
    res.send([
        {id:1,title:'Product A'},
        {id:2,title:'Product A'},
        {id:3,title:'Product A'}
    ])
})
app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、静态文件托管

//index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>11111111</h1>
</body>
</html>
const express  = require("express");
const app=express();
// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',function(req,res){
    res.send([
        {id:1,title:'Product A'},
        {id:2,title:'Product A'},
        {id:3,title:'Product A'}
    ])
})
// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use(express.static('public'))
app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述
可以进一步定制路径,默认是根路径

const express  = require("express");
const app=express();
// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',function(req,res){
    res.send([
        {id:1,title:'Product A'},
        {id:2,title:'Product A'},
        {id:3,title:'Product A'}
    ])
})
// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述
在这里插入图片描述

4、跨域

如果没有设置跨域

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>11111111</h1>
    <script>
        fetch('http://localhost:4000/product').then(res=>res.json()).then(data=>{
            console.log(data);
        })
    </script>
</body>
</html>

在这里插入图片描述

在server.js中安装cors包

npm cors
const express  = require("express");
const app=express();
// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',function(req,res){
    res.send([
        {id:1,title:'Product A'},
        {id:2,title:'Product A'},
        {id:3,title:'Product A'}
    ])
})

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述

5、mongodbDB基础

安装可以连接node和mongodb的工具mongoose

npm i mongoose
const express  = require("express");
const app=express();


// 引入mongoose
const mongoose=require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/express-test')

// 定义模型 参数:模型名称,表结构
const Product =mongoose.model('Product',new mongoose.Schema({
    title:String
}))

// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',async function(req,res){
    // 数据库查询
     res.send(await Product.find());
})

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述

插入数据

const express  = require("express");
const app=express();


// 引入mongoose
const mongoose=require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/express-test')

// 定义模型 参数:模型名称,表结构
const Product =mongoose.model('Product',new mongoose.Schema({
    title:String
}))
// 插入数据,执行一遍就删除,不然会一直插入数据到数据库
// Product.insertMany([
//     {title:'产品1'},
//     {title:'产品2'},
//     {title:'产品3'}
// ])



// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',async function(req,res){
    // 数据库查询
     res.send(await Product.find());
})

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述

6、mongodb的查询

限制查询两条

const express  = require("express");
const app=express();


// 引入mongoose
const mongoose=require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/express-test')

// 定义模型 参数:模型名称,表结构
const Product =mongoose.model('Product',new mongoose.Schema({
    title:String
}))
// 插入数据,执行一遍就删除,不然会一直插入数据到数据库
// Product.insertMany([
//     {title:'产品1'},
//     {title:'产品2'},
//     {title:'产品3'}
// ])



// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',async function(req,res){
    // 数据库查询两条记录
     res.send(await Product.find().limit(2));
})

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述

跳过一条,显示两条

const express  = require("express");
const app=express();


// 引入mongoose
const mongoose=require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/express-test')

// 定义模型 参数:模型名称,表结构
const Product =mongoose.model('Product',new mongoose.Schema({
    title:String
}))
// 插入数据,执行一遍就删除,不然会一直插入数据到数据库
// Product.insertMany([
//     {title:'产品1'},
//     {title:'产品2'},
//     {title:'产品3'}
// ])



// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',async function(req,res){
    // 数据库查询跳过一条显示两条
     res.send(await Product.find().skip(1).limit(2));
})

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述
所以skip和limit结合起来可以实现分页效果

where查询指定条件

const express  = require("express");
const app=express();


// 引入mongoose
const mongoose=require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/express-test')

// 定义模型 参数:模型名称,表结构
const Product =mongoose.model('Product',new mongoose.Schema({
    title:String
}))
// 插入数据,执行一遍就删除,不然会一直插入数据到数据库
// Product.insertMany([
//     {title:'产品1'},
//     {title:'产品2'},
//     {title:'产品3'}
// ])



// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',async function(req,res){
    // 数据库查询指定条件
     res.send(await Product.find().where({
         title:'产品3'
     }));
})

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述

sort排序

键值形式,值为1或者-1,当为1时是正序,为-1时是倒序

const express  = require("express");
const app=express();


// 引入mongoose
const mongoose=require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/express-test')

// 定义模型 参数:模型名称,表结构
const Product =mongoose.model('Product',new mongoose.Schema({
    title:String
}))
// 插入数据,执行一遍就删除,不然会一直插入数据到数据库
// Product.insertMany([
//     {title:'产品1'},
//     {title:'产品2'},
//     {title:'产品3'}
// ])



// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',async function(req,res){
    // 数据库查询指定条件
     res.send(await Product.find().sort({
         _id:-1
     }));
})

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述

通过id参数查询

const express  = require("express");
const app=express();


// 引入mongoose
const mongoose=require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/express-test')

// 定义模型 参数:模型名称,表结构
const Product =mongoose.model('Product',new mongoose.Schema({
    title:String
}))
// 插入数据,执行一遍就删除,不然会一直插入数据到数据库
// Product.insertMany([
//     {title:'产品1'},
//     {title:'产品2'},
//     {title:'产品3'}
// ])



// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',async function(req,res){
    // 数据库查询指定条件
     res.send(await Product.find().sort({
         _id:-1
     }));
})

app.get('/product/:id',async function(req,res){
    const data =await Product.findById(req.params.id);
    res.send(data);
})

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})

在这里插入图片描述
在这里插入图片描述

7、mongoDB新增产品和post请求

安装REST Client插件
在这里插入图片描述
每个请求用三个#分开
在这里插入图片描述

定义基址

在这里插入图片描述

post请求

在这里插入图片描述

//server.js
const express  = require("express");
const app=express();
// 允许express处理json数据
app.use(express.json())


// 引入mongoose
const mongoose=require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/express-test')

// 定义模型 参数:模型名称,表结构
const Product =mongoose.model('Product',new mongoose.Schema({
    title:String
}))
// 插入数据,执行一遍就删除,不然会一直插入数据到数据库
// Product.insertMany([
//     {title:'产品1'},
//     {title:'产品2'},
//     {title:'产品3'}
// ])



// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',async function(req,res){
    // 数据库查询指定条件
     res.send(await Product.find().sort({
         _id:-1
     }));
})

app.get('/product/:id',async function(req,res){
    const data =await Product.findById(req.params.id);
    res.send(data);
})


app.post('/product',async function(req,res){
    const data = req.body;
    const product =await Product.create(data);
    res.send(product);
})

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})
//test.http
@uri=http://localhost:4000/
###
GET  {{uri}}product
###
GET {{uri}}product/6195128113a03a68cd676d6f

###
POST  {{uri}}product
Content-Type: application/json

{
    "title":"产品4"
}

8、修改产品和put请求

patch方法更新局部资源
put整个覆盖
在这里插入图片描述

const express  = require("express");
const app=express();
// 允许express处理json数据
app.use(express.json())


// 引入mongoose
const mongoose=require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/express-test')

// 定义模型 参数:模型名称,表结构
const Product =mongoose.model('Product',new mongoose.Schema({
    title:String
}))
// 插入数据,执行一遍就删除,不然会一直插入数据到数据库
// Product.insertMany([
//     {title:'产品1'},
//     {title:'产品2'},
//     {title:'产品3'}
// ])



// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',async function(req,res){
    // 数据库查询指定条件
     res.send(await Product.find().sort({
         _id:-1
     }));
})

app.get('/product/:id',async function(req,res){
    const data =await Product.findById(req.params.id);
    res.send(data);
})

// 提交
app.post('/product',async function(req,res){
    const data = req.body;
    const product =await Product.create(data);
    res.send(product);
})
// 修改
app.put('/product/:id',async function(req,res){
  const product =await Product.findById(req.params.id);
  product.title=req.body.title;
  await product.save()
  res.send(product)
})

app.listen(4000,()=>{
    console.log('正在监听4000端口');
})
@uri=http://localhost:4000/
###
GET  {{uri}}product
###
GET {{uri}}product/6195128113a03a68cd676d6f

###
POST  {{uri}}product
Content-Type: application/json

{
    "title":"产品4"
}
###
Put  {{uri}}product/619653a91af8c21064d215bf
Content-Type: application/json

{
    "title":"产品44"
}

9、删除产品和delete请求

在这里插入图片描述

const express  = require("express");
const app=express();
// 允许express处理json数据
app.use(express.json())


// 引入mongoose
const mongoose=require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/express-test')

// 定义模型 参数:模型名称,表结构
const Product =mongoose.model('Product',new mongoose.Schema({
    title:String
}))
// 插入数据,执行一遍就删除,不然会一直插入数据到数据库
// Product.insertMany([
//     {title:'产品1'},
//     {title:'产品2'},
//     {title:'产品3'}
// ])



// 使用一个中间件来处理静态文件的托管
// 所有public文件夹中的静态文件可以被访问
app.use('/static',express.static('public'))

// 返回一个可以执行的中间件
// 引入cors模块并执行里面的函数要写在路由前面
app.use(require('cors')());


// 当get方式请求根路径的时候
app.get('/',function(req,res){
    // req请求
    // res响应
    res.send([{
        user:'mike',
    }]);

})
app.get('/about',function(req,res){
    res.send({
        page:'About us'
    })
})
app.get('/product',async function(req,res){
    // 数据库查询指定条件
     res.send(await Product.find().sort({
         _id:-1
     }));
})

app.get('/product/:id',async function(req,res){
    const data =await Product.findById(req.params.id);
    res.send(data);
})

// 提交
app.post('/product',async function(req,res){
    const data = req.body;
    const product =await Product.create(data);
    res.send(product);
})
// 修改
app.put('/product/:id',async function(req,res){
  const product =await Product.findById(req.params.id);
  product.title=req.body.title;
  await product.save()
  res.send(product)
})
// 删除
app.delete('/product/:id',async function(req,res){
    const product =await Product.findById(req.params.id);
    await product.remove();
    res.send({
        success:true
    })
})
app.listen(4000,()=>{
    console.log('正在监听4000端口');
})
@uri=http://localhost:4000/
###
GET  {{uri}}product
###
GET {{uri}}product/6195128113a03a68cd676d6f

###
POST  {{uri}}product
Content-Type: application/json

{
    "title":"产品4"
}
###
Put  {{uri}}product/619653a91af8c21064d215bf
Content-Type: application/json

{
    "title":"产品44"
}

###
DELETE  {{uri}}product/619653a91af8c21064d215bf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值