1、首先我们需要知道,接口是什么?
接口是后端为前端提供的数据——动态资源;Node.js通过每一个路由就可以实现接口
2、RESTful接口:是一种接口的架构风格
1、请求的URL(资源) 在资源前需添加版本号 /v1/users | 名字使用名词,使用复数形式 | /users 用户的资源 /emps 员工资源 /products 商品资源 | ||
后边加入特殊的操作 | /users/login 用户登录 /users/reg 用户注册 | |||
单个资源的操作, 传递编号(params传递) | /users/1 /emps/5 | |||
2、请求方法,对资源的操作 | 增(新建资源) post | 传参方式 | post | |
删(删除资源) delete | params | |||
改(修改资源) put | post | |||
查(获取资源) get | params | |||
3、过滤数据(传参) | eg1:获取第1页,每页显示10条数据,传递页码和每页数据量(get传递) /users?pno=1&count=10 eg2:获取工资在6000~8000之间的员工,传递工资的值 /emps?s1=6000&s2=8000 | |||
4、返回结果 | 是一个json对象形式,是一种字符串对象,属性名用双引号,属性值是字符串,也用双引号。包含:状态码、消息 '{ }' eg1:登录的结果 '{ "code":200 , "msg":"登录成功" }' eg2:获取一组用户 '{ "code":200 , "msg":"登录成功" , "data":一组数据}' |
3、案例
案例1:添加商品到购物车
使用express创建WEB服务器,设置端口,添加搜索路由 get:'/myserch',响应:'搜索成功'
const express=require('express')
const app=express()
app.listen(3000,function(){
console.log('服务器启动成功')
})
//添加路由get:/search',响应搜索的网页s.html,点击提交向服务器发请求post:'mysearch' ,响应'搜索成功'
//添加路由
app.get('/search',(req,res)=>{
res.sendFile(__dirname+'/s.html')
})
//中间环节,可将所有post传参转为对象
app.use( express.urlencoded() )
//路由(post:'/mysearch'),响应提交按钮
app.post('/mysearch',(req,res)=>{
console.log(req.body)
res.send('搜索成功')
})
//路由 get:'/myseach' 响应搜索成功
//手动设置参数名
app.get('/mysearch/:kw',(req,res)=>{
//获取params传递的参数
console.log(req.params)
res.send('搜索成功')
})
/*添加到购物车路由 get:shopping,传递商品的编号lid和要购买的数量num,响应:
添加购物车成功!
商品的编号:XXX
购买的数量:XXX */
app.get('/shopping/:lid/:num',(req,res)=>{
//获取params传递的参数
console.log(req.params)
res.send(`
添加购物车成功!<br>
商品的编号:${req.params.lid} <br>
购买的数量:${req.params.num}
`)
})
案例2:添加员工接口
//引入express模块
const express=require('express')
//引入mysql模块
const mysql=require('mysql')
//创建连接池
const pool=mysql.createPool({
host:'127.0.0.1',
port:'3306',
user:'root',
password:'',
database:'tedu',
connectionLimit:15
})
//创建WEB服务器
const app=express()
//设置端口
app.listen(3000,function(){
console.log('服务器启动成功')
})
//将post传递的参数转为对象
app.use(express.urlencoded({
extended:true
}) )
//添加员工路由 (post: '/v1/emps')→接口
//添加地址:http://127.0.0.1:3000/v1/emps
//请求方式:post
app.post('/v1/emps',(req,res)=>{
//获取post传递的参数
console.log(req.body)
//执行SQL命令,将对象插入到数据表emp
pool.query('insert into emp set ?',[req.body],(err,r)=>{
if(err){
throw err
}
console.log(r)
//成功以后再去响应
//send方法会自动将JS对象转为JSON对象,不需要加''
res.send({"code":200,"msg":"员工添加成功"})
})
})
使用express创建WEB服务器,设置端口;添加路由(接口)。用于添加员工post:'/v1/emps',响应{"code":200,"msg":"员工添加成功"}
案例3:删除员工接口
编写删除员工接口(delete /v1/emps/编号) //路由中需要有参数名接收
获取传递的参数,执行SQL命令,删除编号对应的员工,如果失败{"code":501,"msg":"删除失败"}, 否则{"code":200,"msg":"删除成功"}
接口地址:http://127.0.0.1:3000/v1/emps/2
请求方法:delete
//引入express模块
const express=require('express')
//创建WEB服务器
const app=express()
//设置端口
app.listen(3000,function(){
console.log('服务器启动成功')
})
//引入mysql模块
const mysql=require('mysql')
//创建连接池
const pool=mysql.createPool({
host:'127.0.0.1',
port:'3306',
user:'root',
password:'',
database:'tedu',
connectionLimit:15
})
//将post传参转为对象
app.use(express.urlencoded({
extended:true
}))
//删除员工接口 (delete /v1/emps/2)
//删除地址:http://127.0.0.1:3000/v1/emps/2
//请求方式:delete
app.delete('/v1/emps/:id',(req,res)=>{
console.log(req.body)
pool.query('delete from emp where eid=?',[req.params.id],(err,r)=>{
if(err){
throw err
}
console.log(r)
//成功以后响应
if(r.affectedRows===0){
res.send({"code":501,"msg":"删除失败"})
}else{
res.send({"code":200,"msg":"删除成功"})
}
})
})