框架:是一整套解决方案,提供了项目开发中的常用功能,简化了已有的功能。
Node.js中常见的框架:express koa egg
1.express框架
基于Node.js平台,快速、开放、极简的WEB开发框架
网址:www.expressjs.com.cn
属于第三方模块,需要先去下载安装
npm install express
(1)创建WEB服务器
const express=require('express'); //引入express第三方模块
const app=express();//创建WEB服务器
app.listen(8080); //设置端口
(2)路由
路由根据请求的方法和请求的URL作出特定的响应,是一个独立的方法
路由三要素:请求的方法、请求的URL、回调函数
res 响应的对象
res.send() 设置响应的内容并发送
res.redirect() 设置跳转的URL并发送
res.sendFile() 设置响应的文件并发送,文件必须使用绝对路径(__dirname)
req 请求的对象
req.url 获取请求的URL
req.method 获取请求的方法
req.query 获取get传递的数据(查询字符串),结果为对象
2.路由中获取数据
传递方式 格式 路由中获取,结果为对象
get传递 http://127.0.0.1:8080/mysearch?kw=笔记本 req.query
{kw: '笔记本'}
post传递 URL中不可见(在http协议的请求主体) req.on('data', (chunk)=>{
chunk获取的数据,转字符串后位查询字符串,需要解析为对象
querystring.parse( chunk.toString() )
})
{user: 'tao', password: '123456'}
路由传参 http://127.0.0.1:8080/package/mysql 需要设置形参
app.get('/package/:pname',(req,res)=>{
req.params //获取路由传参的数据,格式为对象
})
{pname: 'mysql'}
观察数据的传递方式和之前的区别
对比get和post的区别
get请求会被浏览器缓存,post不会被缓存,post安全度相对高
get请求传递的数据最大不超过8k,post请求传递的数据大小没有限制
get请求速度相对post比较快,在对数据安全要求不高的情况下会使用get,例如搜索
1.路由器
用来管理路由,将同一个功能模块下的所有的路由统一管理,最终路由器被WEB服务器使用
0------------------------------------------------------------------------------------------------------------------------------0
路由器
const express=require('express'); //引入express
const r=express.Router();//创建路由器对象
//添加路由
module.exports=r; //导出路由器对象
WEB服务器引入并使用路由器
const userRouter=require('./user.js');
app.use('/user',userRouter);
2.中间件
用于拦截对服务器的请求
分为应用级中间件、路由级中间件、内置中间件、第三方中间件、错误处理中间件
(1)应用级中间件
就是一个函数,一旦拦截到以后会自动调用这个函数
app.use( 要拦截的URL, 函数 )
(2)路由级中间件
就是路由器的使用
(3)内置中间件
托管静态资源中间件
如果浏览器端请求静态资源(html,css,js,图像...),不需要通过路由去响应,而是自动的到某个目录下寻找。
app.use( express.static('要托管的目录') )
(4)第三方中间件
都是以第三方模块的形式存在,需要先下载安装
body-parser中间件
下载安装 npm install body-parser
//1.引入body-parser
//2.使用body-parser将所有post请求的数据解析为对象
app.use( express.urlencoded({
extended:false //是否使用第三方的qs模块解析为对象
}) );
//3.在路由中获取post请求的数据
req.body
其它第三方中间件:https://www.expressjs.com.cn/resources/middleware.html
文件上传中间件:http://www.codece.com/archives/173
3.mysql模块
是Node.js下专门用于操作mysql数据库的模块
下载安装
npm install mysql
连接数据库
mysql.exe -h127.0.0.1 -P3306 -uroot -p
mysql -uroot
mysql -uroot<拖拽SQL脚本文件
------------------------------sql配置文件-----------------------------------------------------
const c =mysql.createConnection({
host:'127.0.0.1',
port:'3306',
user:'root',
password:'',
database:'tedu',
connectionLimit:20
});
module.exports=c;//需要暴露模块才能调用
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下,每一个路由就是一个接口
3.ApiPost
专门用于调试后端接口的工具,可以生成接口说明文档。