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);
而且正如我们所说的,它还会将我们的Content-Type
头部设置为application/json
。
console.log(result.data.headers['Content-Type']);
发送序列化的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'])
为了解决这个问题,我们需要明确地将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)
console.log(result.data.headers['Content-Type'])
在这篇文章中,我们学习了如何用Axios发送POST JSON请求,充分意识到这些数据可能是序列化的,也可能是非序列化的,我们处理了两种情况。