第六天学习后端——egg——POST请求

176 阅读3分钟

网络请求(注意这里只是讲网络请求,并没有跨域)最常用的是GET和POST请求。

网络请求的意义:1.给后端做网络请求,给后端发送数据;2.接收后端发过来的数据;3.完成前后端交互

(1)GET请求:一般情况下,发送请求从服务器上获取资源,不会对服务器资源产生任何影响的时候使用GET请求。

(2)POST请求:向服务器发送数据(登录)、上传文件等让服务器处理,会对服务器资源产生影响的时候使用POST请求。

区别

GET请求参数会完整的保留在浏览器的历史记录中,POST请求的参数不会保留。

image.png

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
   
 }
}

出现安全验证问题:

image.png

解决安全验证问题:

image.png

3.post数据默认大小是100kb,如果需要调整:

在config.default.js文件中覆盖框架的默认值:

module.exports = {

	bodyParser: {
            
		jsonLimit: '1mb',
		formLimit: '1mb',
	},
  };

image.png

4.获取上传的文件:

1.egg必须启用file模式(后端要接收文件,必须开启file模式)

在config.default.js文件中敲代码:

config.multipart = {

 mode: 'file',
};

image.png

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文件:

image.png

原生AJAX做post请求:

image.png

用axios做post请求

image.png

注册路由:

  • 注意:如果是get请求就用router.get()

  • 如果是post请求就用routeer.post()

image.png

home.js文件:后端接收前端数据并给前端返回数据

image.png

代码运行结果:

image.png

image.png

POST请求大数据(文件)案例:

1.引用axios做post请求:

前端上传文件用input标签的type属性(type="file").

前端给后端发送文件:

  let data=new FormData()
  
 data.append("获取的标签",标签里的内容)

image.png

image.png

2.在config.default.js文件开启file模式

image.png

3.在router.js文件中注册一个网址

image.png

4.后端接收文件,处理数据,并返回一个数据

因为我们对文件进行了操作(拷贝和删除旧路径的文件),所以要记得引入fs模块, 在这里,我们还对文件路径及其文件名进行了使用,引入了path模块

为什么要对文件路径进行移动?

因为用户上传的文件是保存在一个临时的文件中,需要把文件移动到后端托管的静态文件中,这样这些图片就拥有了网址,用户就可以网址访问到图片。

image.png

代码运行结果:

image.png

image.png

拷贝文件的结果:

image.png