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