node.jsday07
目录
前言
node.jsday07学习开始
一、复习
二、RESTful接口
是一种接口的规范
2.1返回结果
JSON格式
2.2请求方式
- get--用于获取资源,查询数据
- post --用于新建资源,插入数据
- delete--用于删除资源,删除数据
- put--用于修改资源,修改数据
2.3接口地址(请求的URL)
- 带着资源名称(前缀), 带着版本号
- /v1/emps/update
- /v1/emps/add
- /v1/news/list
2.4传参方式
- 查找/删除--get传参 / params传参
- 修改/插入--post传参
三、练习
- 练习:编写修改员工的接口(put /update),post传递员工的编号、姓名、性别、生日、工资,所属部门,获取传递的参数,执行SQL命令修改编号对应的员工,如果修改失败响应{code:400,msg:'修改失败'} ,否则响应{code:200,msg:'修改成功'}
- 练习:编写员工列表的接口(get /v1/emps/list),get传递当前的页码和每页的数据量,执行SQL命令,查询数据这一页员工的数据,最后响应{code:200,msg:'查询成功', data: 查询的数据}
// 引入express模块 const express = require('express') // 引入mysql模块 const mysql = require('mysql') // 创建WEB服务器 const app = express() // 设置端口 app.listen(3000,()=>{ console.log('服务器启动成功') }) // 托管静态资源 app.use( express.static('public') ) // 创建连接池对象 const pool = mysql.createPool({ host: '127.0.0.1', port: '3306', user: 'root', password: '', database: 'tedu', connectionLimit: '15', multipleStatements: true //开启执行多个SQL命令 }) // 添加路由(get /search) // 1.查找员工接口 app.get('/search',(req,res)=>{ // 获取get传递的参数 var obj = req.query console.log(obj) // 执行SQL命令,查询该员工 pool.query('select * from emp where ename=?',[obj.ename],(err,r)=>{ if(err) { throw err } console.log(r) // 如果查询结果是空数组说明员工不存在,否则就是存在 // 空数组长度为0 if(r.length===0){ // send方法会自动将JS对象转为JSON res.send({code: 400,msg:'该员工不存在'}) }else{ res.send({code: 200,msg: '查找成功',data: r}) } }) }) // 将post传参转为对象 app.use( express.urlencoded({ extended: true }) ) // 2.添加员工接口(post /add) // 接口地址(请求的URL):http://127.0.0.1:3000/add // 请求方式(请求方法):post app.post('/add', (req,res)=>{ // 获取post传递的参数 var obj = req.body console.log(obj) // 执行SQL命令,将数据插入到数据库 pool.query('insert into emp set ?',[obj],(err,r)=>{ if(err) { throw err } console.log(r) // 直接响应成功 res.send({code:200,msg:'员工添加成功'}) }) }) // 3.删除员工接口(路由 get /delete ) // 接口地址:http://127.0.0.1:3000/delete // 请求方式:delete app.delete('/delete',(req,res)=>{ // 获取get传递的参数 var obj = req.query console.log(obj) // 执行SQL命令,删除编号对应的员工 pool.query('delete from emp where eid=?',[obj.eid],(err,r)=>{ if(err) { throw err } console.log(r) // r 成功结果为对象,如果对象下的affectedRows属性为0说明删除失败,否则删除成功 if(r.affectedRows===0){ res.send({code:400,msg:'删除失败'}) }else{ res.send({code:200,msg:'删除成功'}) } }) }) // 4.修改员工接口(put /update) //接口地址:/update //请求方式:put app.put('/update',(req,res)=>{ // 获取post传递的参数 var obj = req.body console.log(obj) // 执行SQL命令 pool.query('update emp set ? where eid=?',[obj,obj.eid],(err,r)=>{ if(err) { throw err } console.log(r) // r 成功的结果是对象,如果对象下的属性changedRows值为0说明修改失败,否则说明修改成功 if(r.changedRows===0){ res.send({code:400,msg:'修改失败'}) }else{ res.send({code:200,msg:'修改成功'}) } }) }) // 5.员工列表接口(get /v1/emps/list) // 请求方式:get // 接口地址:/v1/emps/list app.get('/v1/emps/list',(req,res)=>{ // 获取get传递的参数 var obj = req.query // 如果页码为空,默认为第1页 if(!obj.pno){ obj.pno = 1 } // 如果每页的数据量为空,默认为5条 if(!obj.count){ obj.count = 5 } console.log(obj) // 计算出开始查询的值 var start = (obj.pno-1)*obj.count // 将每页数据量转为数值 var size = parseInt(obj.count) // 执行SQL命令,查询出这一页对应的数据 pool.query('select * from emp limit ?,?;select count(*) n from emp',[start,size],(err,r)=>{ if(err) { throw err } console.log(r) // 响应到客户端 res.send({ code: 200, msg: '查询成功', data: r[0], total: r[1][0].n, //总数据量 pages: Math.ceil( r[1][0].n/obj.count ), //总页数= 向上取整(总数据量/每页数据量) pno: obj.pno //当前页码 }) }) })// 引入express模块 const express = require('express') // 引入mysql模块 const mysql = require('mysql') // 创建WEB服务器 const app = express() // 设置端口 app.listen(3000,()=>{ console.log('服务器启动成功') }) // 托管静态资源 app.use( express.static('public') ) // 创建连接池对象 const pool = mysql.createPool({ host: '127.0.0.1', port: '3306', user: 'root', password: '', database: 'tedu', connectionLimit: '15', multipleStatements: true //开启执行多个SQL命令 }) // 添加路由(get /search) // 1.查找员工接口 app.get('/search',(req,res)=>{ // 获取get传递的参数 var obj = req.query console.log(obj) // 执行SQL命令,查询该员工 pool.query('select * from emp where ename=?',[obj.ename],(err,r)=>{ if(err) { throw err } console.log(r) // 如果查询结果是空数组说明员工不存在,否则就是存在 // 空数组长度为0 if(r.length===0){ // send方法会自动将JS对象转为JSON res.send({code: 400,msg:'该员工不存在'}) }else{ res.send({code: 200,msg: '查找成功',data: r}) } }) }) // 将post传参转为对象 app.use( express.urlencoded({ extended: true }) ) // 2.添加员工接口(post /add) // 接口地址(请求的URL):http://127.0.0.1:3000/add // 请求方式(请求方法):post app.post('/add', (req,res)=>{ // 获取post传递的参数 var obj = req.body console.log(obj) // 执行SQL命令,将数据插入到数据库 pool.query('insert into emp set ?',[obj],(err,r)=>{ if(err) { throw err } console.log(r) // 直接响应成功 res.send({code:200,msg:'员工添加成功'}) }) }) // 3.删除员工接口(路由 get /delete ) // 接口地址:http://127.0.0.1:3000/delete // 请求方式:delete app.delete('/delete',(req,res)=>{ // 获取get传递的参数 var obj = req.query console.log(obj) // 执行SQL命令,删除编号对应的员工 pool.query('delete from emp where eid=?',[obj.eid],(err,r)=>{ if(err) { throw err } console.log(r) // r 成功结果为对象,如果对象下的affectedRows属性为0说明删除失败,否则删除成功 if(r.affectedRows===0){ res.send({code:400,msg:'删除失败'}) }else{ res.send({code:200,msg:'删除成功'}) } }) }) // 4.修改员工接口(put /update) //接口地址:/update //请求方式:put app.put('/update',(req,res)=>{ // 获取post传递的参数 var obj = req.body console.log(obj) // 执行SQL命令 pool.query('update emp set ? where eid=?',[obj,obj.eid],(err,r)=>{ if(err) { throw err } console.log(r) // r 成功的结果是对象,如果对象下的属性changedRows值为0说明修改失败,否则说明修改成功 if(r.changedRows===0){ res.send({code:400,msg:'修改失败'}) }else{ res.send({code:200,msg:'修改成功'}) } }) }) // 5.员工列表接口(get /v1/emps/list) // 请求方式:get // 接口地址:/v1/emps/list app.get('/v1/emps/list',(req,res)=>{ // 获取get传递的参数 var obj = req.query // 如果页码为空,默认为第1页 if(!obj.pno){ obj.pno = 1 } // 如果每页的数据量为空,默认为5条 if(!obj.count){ obj.count = 5 } console.log(obj) // 计算出开始查询的值 var start = (obj.pno-1)*obj.count // 将每页数据量转为数值 var size = parseInt(obj.count) // 执行SQL命令,查询出这一页对应的数据 pool.query('select * from emp limit ?,?;select count(*) n from emp',[start,size],(err,r)=>{ if(err) { throw err } console.log(r) // 响应到客户端 res.send({ code: 200, msg: '查询成功', data: r[0], total: r[1][0].n, //总数据量 pages: Math.ceil( r[1][0].n/obj.count ), //总页数= 向上取整(总数据量/每页数据量) pno: obj.pno //当前页码 }) }) })
总结
node.jsday07学习结束