关于vue-resource报错450的解决方案
本文介绍了关于vue-resource报错450的解决方案,分享给大家,具体如下:
一、基本使用:
1.页面引入
import vueresource from 'vue-resource' vue.use(vueresource)
2. 调取接口
vue.http.post(url, { 'data1': data1, 'data2': 'data2' }).then(response => { console.log('success', response) }, response => { console.log('error', response) })
二、报错450
定位错误信息:请求header没有完全一一对应。content-type: application/x-www-form-urlencoded; charset=utf-8应为content-type: application/json; charset=utf-8,检查页面代码,发现已经设置了
vue.http.interceptors.push(function (request, next) { request.headers.set('content-type', 'application/json; charset=utf-8') request.headers.set('content-type', 'application/json') next() })
只是页面没有起作用而已,那究竟是什么原因导致页面设置的content-type失效了呢?继续追溯,发现跟这行代码有关
// vue.http.options.crossorigin = true // vue.http.options.emulatehttp = true vue.http.options.emulatejson = true //(跟这行代码有关)
三、分析
下面分别来讲一下这几行代码的用处,以及emulatejson是怎么影响到content-type设置的。
1. vue.http.options.crossorigin
这个很明显是设置跨域的,此处不多讲。
2. vue.http.options.emulatehttp
参考地址:
摘出源码
/** * http method override interceptor. */ export default function (request, next) { if (request.emulatehttp && /^(put|patch|delete)$/i.test(request.method)) { request.headers.set('x-http-method-override', request.method); request.method = 'post'; } next(); }
大概的意思就是如果请求方式为put|patch|delete,服务器又没法处理这几类请求的时候,设置vue.http.options.emulatehttp = true的话可以将x-http-method-override设置为put|patch|delete,然后使用普通的post进行请求。
关于x-http-method-override讲一下,它的使用场景是:
在某些http代理不支持类似put|patch|delete这些类型http请求的情况下,可以通过另一种完全违背协议的http方法来"代理"。这种协议就是,使客户端发出http post请求并设置header里x-http-method-override值为put|patch|delete。
3. vue.http.options.emulatejson
参考地址:
摘出源码
/** * form data interceptor. */ import url from '../../url/index'; import { isobject, isformdata } from '../../util'; export default function (request, next) { if (isformdata(request.body)) { request.headers.delete('content-type'); } else if (isobject(request.body) && request.emulatejson) { request.body = url.params(request.body); request.headers.set('content-type', 'application/x-www-form-urlencoded'); } next(); }
从第17行可以看到,如果设置了emulatejson的话会默认加上这句
request.headers.set('content-type', 'application/x-www-form-urlencoded');
这就是为什么我们设置的content-type失效了。只要去掉vue.http.options.emulatehttp = true 或者直接置为false就可以了。
vue-resource(github)地址:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 世界上第一台机器人,工业机器人(发明于1959年)
下一篇: 通信设备制造行业百强企业
推荐阅读
-
详解Androidstudio3.0 关于Gradle报错的问题(小结)
-
SparkStreaming整合Flume的pull方式之启动报错解决方案
-
连接MySQL报错误代码 ERROR 1045时的解决方案
-
关于webpack打包报错Chunk.entrypoints:UseChunks.groupsIterableandfilterbyinstanceofEntrypointinstead的解决办法
-
出现 vue arr.some is not a function 报错的解决方案
-
关于vue的语法规则检测报错问题的解决
-
关于Cookie中带有中文乱码报错的问题解决
-
关于case when语句的报错问题详解
-
关于CefSharp在客户端运行报错的解决方案
-
联想ThinkPad E431&E531 开机出现0190报错现象的解决方案详细介绍