axios发delete请求,后台收不到参数
2021-05-02 大约 2 分钟
# 1、问题;
vue
项目前台用axios
发请求;由于之前也是一直用axios
发请求,所以这一次遇到问题一脸懵逼;
请求方式:
delete
;请求头类型:'application/json;charset=utf-8'
后台我用的是
nodejs
和express
解决:
axios
的请求头设置错误;错的设置;
const _Axios = axios.create({ headers: { 'Content-Type': 'application/json,charset=utf-8' } })
1
2
3
4
5正确的设置;
const _Axios = axios.create({ headers: { 'Content-Type': 'application/json;charset=utf-8' } }) // 或者 axios.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8'
> 修改`application/json,charset=utf-8`后的`,`为`;`就可以了,后台就成功收到参数了; > > 不设置也是可以的,因为默认就是`application/json;charset=utf-8`
1
2
3
4
5扩展:
1、get请求:GET 请求不存在请求实体部分,键值对参数放置在 URL 尾部,浏览器把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串追加到url后面用?分割,加载这个新的url。因此请求头不需要设置 Content-Type 字段。 2、post请求:headers中有content-type这个字段一般包括:application/x-www-form-urlencoded、multipart/form-data、application/json、text/xml。
1
2
# 2、express接受参数;
如果是用express.router()
的方式设计路由,那么你在接受参数时:
对于get请求来说可以在
req.query
中获取url后面的参数:router.get('/note', (request, response, next) => { console.log(request.query) })
1
2
3对于post请求来说,在不使用其它插件的情况下,只能采用原生获取参数的方法;
// 'Content-Type': 'application/json;charset=utf-8' router.post(/\/(add|import)/, (request, response, next) => { let body = '' request.on('data', function (chunk) { body += chunk // chunk是二进制数据 }) request.on('end', function (result) { console.log(result, '====', body, JSON.parse(body)) // 转化为对象 }) })
1
2
3
4
5
6
7
8
9
10body就是获取的参数,然后y用JSON.parse(body)进行解析。
使用插件
body-parser
const bodyParser = require('body-parser') const app = new express(); app.use(bodyParser.json()) ... router.post('/note', (request, response, next) => { console.log(request.body) })
1
2
3
4
5
6
7
8然后就直接可以在
req.body
中来获取请求过来的参数了。req.params
// 适合获取production后的id:http://localhost:3000/production/id router.get('/note', (request, response, next) => { console.log(request.params) })
1
2
3
4