问题背景:
使用axios发post请求时,后端接收不到参数的情况,可能是由于axios请求参数格式不正确或后端接收参数方式不正确所致。为了解决这个问题,我们提供了以下的攻略。
解决方案:
- axios请求参数格式问题
当我们使用axios发post请求时,需要把参数放在请求体中,但是axios默认的请求格式是JSON格式,而一些后端框架默认接收的数据格式是form表单格式,所以就会出现接收不到参数的情况。
解决方法:
- 把请求格式改为form表单格式,使用qs库来序列化参数(示例一)
import axios from 'axios';
import qs from 'qs';
axios({
method: 'post',
url: '/api/login',
data: qs.stringify({
username: 'admin',
password: '123456'
})
})
- 后端接收参数方式不正确
当使用axios发post请求时,在后端接收参数时也有可能出现问题。比如常见的使用req.body获取请求参数的方式,在某些极端情况下可能获取不到参数。
解决方法:
- 使用body-parser库来解析请求体(示例二)
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.post('/api/login', (req, res) => {
const username = req.body.username;
const password = req.body.password;
})
以上两种解决方案可以各自单独使用,也可以同时使用,根据实际情况灵活选择。这样就可以避免在使用axios发post请求时后端接收不到参数的问题了。
示例一中qs.stringify()的作用是把json对象序列化成form表单格式。
示例二中,我们使用了body-parser中间件。body-parser可以解析请求体,使我们能够使用req.body来获取post请求中的参数值。需要注意的是,需要在使用app.post()方法前添加body-parser中间件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:axios 发 post 请求,后端接收不到参数的完美解决方案 - Python技术站