网络请求(注意这里只是讲网络请求,并没有跨域)最常用的是GET和POST请求。
网络请求的意义:1.给后端做网络请求,给后端发送数据;2.接收后端发过来的数据;3.完成前后端交互
(1)GET请求:一般情况下,发送请求从服务器上获取资源,不会对服务器资源产生任何影响的时候使用GET请求。
(2)POST请求:向服务器发送数据(登录)、上传文件等让服务器处理,会对服务器资源产生影响的时候使用POST请求。
区别:
GET请求参数会完整的保留在浏览器的历史记录中,POST请求的参数不会保留。
POST请求前后端
接收POST请求的数据:ctx.request.body 而不是 ctx.body
POST请求的特点
1.暗文发送,具有一定的隐私性,可以存放大量数据,发送数据速度相较于get请求慢。
2.把要给后端发送的大量数据:文件,处理成表单数据(var file=new FormData()),通过表单数据发送给后端
3.post请求会有安全验证问题,简单的处理方式是关闭安全验证:
在config.default.js文件中敲以下代码:
//关闭csrf
config.security={
csrf:{
enable:false
}
}
出现安全验证问题:
解决安全验证问题:
3.post数据默认大小是100kb,如果需要调整:
在config.default.js文件中覆盖框架的默认值:
module.exports = {
bodyParser: {
jsonLimit: '1mb',
formLimit: '1mb',
},
};
4.获取上传的文件:
1.egg必须启用file模式(后端要接收文件,必须开启file模式)
在config.default.js文件中敲代码:
config.multipart = {
mode: 'file',
};
2.前端给后端发送文件
//把要给后端发送的"大量"数据:文件
//处理成表单数据,data:表单数据包
let data=new FormData()
//向表单中添加数据
data.append("email",email.value)
data.append("password",password.value)
//因为input标签file属性可以一次传9个文件
//目前我只需要一个图片,所以touxiang.files[0]
//添加图片,图片是一个文件
data.append("touxiang",touxiang.files[0])
//前端发送网络请求,res:后端返回给前端的数据
axios.post(url,data).then((res)=>{})
3、在前端为前端发送的文件创建一个网址
var url1=window.URL.createObjectURL(data.files[0])
console.log(url1)
案例:
POST请求数据案例:
前端index.html文件:
原生AJAX做post请求:
用axios做post请求:
注册路由:
-
注意:如果是get请求就用
router.get() -
如果是post请求就用
routeer.post()
home.js文件:后端接收前端数据并给前端返回数据
代码运行结果:
POST请求大数据(文件)案例:
1.引用axios做post请求:
前端上传文件用input标签的type属性(type="file").
前端给后端发送文件:
let data=new FormData()
data.append("获取的标签",标签里的内容)
2.在config.default.js文件开启file模式
3.在router.js文件中注册一个网址
4.后端接收文件,处理数据,并返回一个数据
因为我们对文件进行了操作(拷贝和删除旧路径的文件),所以要记得引入fs模块, 在这里,我们还对文件路径及其文件名进行了使用,引入了path模块
为什么要对文件路径进行移动?
因为用户上传的文件是保存在一个临时的文件中,需要把文件移动到后端托管的静态文件中,这样这些图片就拥有了网址,用户就可以网址访问到图片。
代码运行结果:
拷贝文件的结果: