1.mysql模块
createPool( ) 创建连接池
query(SQL命令, 数组, 回调函数 ) 执行SQL命令,数组保存用来过滤的数据,最后再去替换占位符,通过回调函数获取结果
SQL注入
select * from emp where 1;
select * from emp where ename="tao" or "1";
占位符(?):先将用户提供的值进行过滤,过滤完再替换位置。
select* from emp where sex=? and salary>? , [0, 8000]
2.后端接口
接口:后端提供的动态资源(注册、登录、数据操作...)
RESTful接口:是一种接口风格
(1)URL
员工资源
http://127.0.0.1:8080/v1/emps 多个资源
版本号 资源名称(复数形式)
http://127.0.0.1:8080/v1/emps/3 单个资源
编号
用户资源
http://127.0.0.1:8080/v1/users/login 对资源的操作方式
http://127.0.0.1:8080/v1/users/reg
(2)请求的方法
对资源的操作方式
get 获取资源
post 新建资源
delete 删除资源
put 修改资源
(3)过滤数据
针对于多个资源的操作
http://127.0.0.1:8080/v1/emps?pno=1&count=10
通过分页过滤数据 当前页码 每页的数据量
http://127.0.0.1:8080/v1/emps?salary1=6000&salary2=8000
过滤一组工资区间
(4)返回结果
格式为json,字符串形式的对象,属性名必须用双引号的形式,属性值如果是字符串必须用双引号
包含状态码、消息、数据
例如:用户登录的返回结果
{"code": 200, "msg": "登录成功"}
例如:获取用户的列表
{"code":200, "msg":"获取成功", "data": [....]}
Node.js下,每一个路由就是一个接口 |
1.练习:编写文件03_app.js,使用express创建web服务器,添加路由(post /v1/emps),用于插入一条员工数据,响应‘添加成功’。
2.练习:编写查找员工的接口(get /v1/emps/编号),获取传递的编号,到数据库中查找编号对应的员工,最后响应 {code:200, msg:'查找成功', data: 数据}
const express=require('express');
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(8080,()=>{
console.log('服务器创建成功');
});
//使用中间件将所有post请求的数据解析为对象
app.use( express.urlencoded({
extended:false
}) );
//添加路由(post /v1/emps)
//接口地址:http://127.0.0.1:8080/v1/emps
//请求方法:post
app.post('/v1/emps',(req,res)=>{
//获取post请求的数据
console.log(req.body);
//执行SQL命令,将对象插入到数据库tedu下的emp表中
pool.query('insert into emp set ?',[req.body],(err,result)=>{
if(err) throw err;
console.log(result);
//res.json()和res.send()作用相同,都可以将对象转为json
res.send({code:200,msg:'员工添加成功'});
});
});
//2练习
//查找员工路由(get /v1/emps/编号)
//接口地址:http://127.0.0.1:8080/v1/emps/3
//请求方法:get
app.get('/v1/emps/:eid',(req,res)=>{
//获取路由传参的数据
console.log(req.params);
//执行SQL命令
pool.query('select * from emp where eid=?',[req.params.eid],(err,result)=>{
if(err) throw err;
console.log(result);
//把查询到的数据响应到客户端
//查询的结果是数组,如果是空数组说明该员工不存在
if(result.length===0){
res.send({code:201,msg:'员工不存在'});
}else{
res.send({code:200,msg:'查找成功',data:result});
}
});
});
3.ApiPost
专门用于调试后端接口的工具,可以生成接口说明文档。