总结本周开发中遇到的几个问题:
1. 文件上传
当Content-Type为multipart/form-data时,上传文件的参数必须为FormData格式.
对于文件上传我一直都有一些懵懵懂懂的疑惑,这周在开发中总结的两条:
- 上传文件的
Content-Type
为multipart/form-data
时,上传文件的参数需要为FormData
格式 FormData
是二进制文件形式,创建FormData
的方法为:
const fd = new FormData(); // 创建一个FormData实例
// 向实例中添加属性
fd.append("file", form.files[0].raw); // 文件。对于使用了elemnt-upload组件的数据,取它的.raw即可
fd.append("name", form.files[0].name); // 文件名称
fd.append("description", form.description); // 其它属性
// 根据需要,还可以添加其它属性
2. Nginx代理访问第三方接口
post请求使用301 Moved Permanently,会直接变为Get请求,参数传不进去
对方的post请求使用301 Moved Permanently,导致直接变为Get请求,参数传不进去、结果不正确等等。分析问题的思路是:
- 首先针对post请求,当配置的
location /xxx/
路径下没有子路径时,访问这个路径就会301,所以把/去掉就可以了。 - 但是,对于配置了
location /xxx/
,使用get请求访问这个路径下的接口,虽然它301了,但是结果正确(这可能因为301本身就会重定向到get请求,反正都是get请求,所以参数能传进去的原因),但是put请求504了。所以,这又是什么原因。。。。。
3. 调用外部服务跨域
调用外部服务,如果用PostMan和在浏览器地址里直接访问可以,但是在浏览器中使用报错,类似跨域,直接找对方开跨域权限
调用外部服务,如果用PostMan和在浏览器地址里访问可以,但是在我们的系统中使用却报错,类似跨域。这时候需要找对方服务,这是因为他们设置了不允许跨域,我们作为调用方没法处理的,所以这时候就不要内耗了,找就对了。
4. Rancher部署
Rancher部署后,nginx代理访问第三方服务401,大多数情况都是因为路径没有写好
有两种可能:
- nginx的
location
和服务地址不一致,如大小写检查等 - 访问的接口打不带服务商。例如,Rancher里的访问路径是
portal-web
,那么,配置代理路径的时候,就需要把这个路径前缀加上,否则访问的时候打不到我们的服务上,所以就401~ 只能报没有权限的问题。
5. 关于302
重定向,在浏览器中属于浏览器的默认行为,前段没有办法去拦截302响应的结果,也没法对重定向之后的地址做处理。这一点请后端开发谨记!!