Axios是一个基于承诺的HTTP客户端库,它使得向REST端点(主要是API)发送异步HTTP请求(如 POST GET DELETE )变得简单。

在这篇文章中,我们将学习如何用Axios发送POST JSON请求,以及如何处理之前的序列化和非序列化的数据。

如何使用Axios发送POST JSON请求

POST请求是用来 发送数据 到一个端点的。例如,如果我们有一个注册页面,用户提交他们的信息,这些信息可以作为JSON发送到我们使用POST JSON请求指定的端点。

我们使用Axios的 axios.post() 方法来发送POST请求,该方法需要两个主要参数--端点的URL( url ),以及代表我们想要发布的数据的对象( data )。

axios.post(url[, data[, config]])

除了这两个参数,还有第三个参数--config 。它被用来配置我们要发送的POST请求,主要是设置头文件。

发送未序列化的数据

需要注意的是,Axios默认使用JSON来发布数据,这意味着我们传递给Axios的任何对象都会自动将对象序列化为JSON,并将Content-Type 头部设置为application/json 。让我们在例子中说明一下--假设我们发布的对象是{ name: 'John Doe' }

const result = await axios.post('https://testapi.org/post', { name: 'John Doe' });

Axios会自动将该对象序列化为JSON格式。

console.log(result.data.data); // '{"name":"John Doe"}'

而且正如我们所说的,它还会将我们的Content-Type 头部设置为application/json

console.log(result.data.headers['Content-Type']); // 'application/json;charset=utf-8'

发送序列化的JSON字符串

到目前为止,我们已经看到Axios会自动序列化我们发送的任何数据,但在这种情况下,我们将发送一个序列化的JSON字符串作为axios.post() 方法的第二个参数。

const usersName = JSON.stringify({ name: 'John Doe' });

Axios会简单地把这个数据当作一个表单编码的请求体,而不是把内容类型头设置为application/json ,如下图所示。

const usersName = JSON.stringify({ name: 'John Doe' });
const result = await axios.post('https://testapi.org/post', usersName);
console.log(result.data.headers['Content-Type']); // 'application/x-www-form-urlencoded',

为了解决这个问题,我们需要明确地将Content-Type 头部设置为application/json 。我们可以通过在调用axios.post() 方法时传递config 参数来做到这一点。

const usersName = JSON.stringify({ name: 'John Doe' });
customConfig = {
    headers: {
    'Content-Type': 'application/json'
const result = await axios.post('https://testapi.org/post', usersName, customConfig);
console.log(result.data.data); // '{"name":"John Doe"}'
console.log(result.data.headers['Content-Type']); // 'application/json',

在这篇文章中,我们学习了如何用Axios发送POST JSON请求,充分意识到这些数据可能是序列化的,也可能是非序列化的,我们处理了两种情况。