本文最初发表在DeadSimplechat博客上:Axios GET and POST examples
在本文中,我们将了解如何使用Axios发送和发布请求。 Axios是浏览器和Node.js Server的基于承诺的HTTP客户端。
Axios可以在浏览器和服务器上运行相同的代码。
在nodejs服务器端,它使用http模块,在浏览器端,它使用xmlhttprequests
我们将在下面了解有关Axios的更多信息,以及如何发送和接收http请求并获取
的详细示例ðâ
DeadSimplechat的新手?这是转弯键聊天,您可以轻松地将其添加到网站或应用程序中,而无需任何复杂的代码。对于虚拟 /现场活动,SaaS应用程序,社交平台,教育,游戏,金融注册免费< / p>
安装轴
有多种安装Axios的方法。这是一些
使用npm:
$ npm install axios
使用鲍尔
$ bower install axios
使用纱线:
$ yarn add axios
使用CDN:
JSDELIVR和UNPKG都为Axios提供CDN Scirpts
//using JsDelivr
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
// using unpkg CDN
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
现在我们已经安装了Axios。让我们介绍一个简单的示例,说明如何发送请求
ðâ€deadSimplechat?这是转弯键聊天,您可以轻松地将其添加到网站或应用程序中,而无需任何复杂的代码。对于虚拟 /现场活动,SaaS应用程序,社交平台,教育,游戏,金融注册免费< / p>
用JSON提出邮政请求
现在让我们使用Axios创建一个邮政请求,并在那里发送JSON数据
首先让我们在项目中需要Axios,例如:
const axios = require('axios').default;
// axios.<method> will now provide autocomplete and parameter typings
现在创建一个邮政请求
axios.post('/addCandy',{
candyName: 'Mars Bar',
quantity: '24'
});
我们在做什么
我们正在使用axios.post在路径 /addcandy上提出邮政请求,并且与邮政请求一起发送JSON数据
{
candyName: 'Mars Bar',
quantity: '24'
}
接收此帖子请求的服务器将将此数据保存在其数据库中,并将响应回复为200个响应代码,或者将发送响应,即与相应的响应代码和相应的响应代码以及错误消息
我们需要记录服务器发送的消息和代码,我们将下一个执行此操作
axios.post('/addCandy',{
candyName: 'Mars Bar',
quantity: '24'
}).then(function(response){
console.log(response)
})
另外,可能会遇到我们在提出请求时犯了一个错误,并且正在发生错误。
我们也需要捕获该错误。让我们添加另一行代码以捕获该错误
.catch(function (error) {
console.log(error);
});
完整的代码看起来像
axios.post('/addCandy',{
candyName: 'Mars Bar',
quantity: '24'
}).then(function(response){
console.log(response)
})
.catch(function (error) {
console.log(error);
});
也可以通过将相关配置传递给Axios
来发送发布请求
axios(config);
//sending a post request
axios({
method: 'post',
url: '/addCandy',
data: {
candyName: 'Mars Bar',
quantity: '24'
}
});
还有一些别名方法可以用作上述方法的替代方法
axios.post(url,[data[,config]])
使用异步/等待的Axios提出发布请求
使用Axios提出后请求的更简单的方法是使用异步等待关键字
使用HTTP标头发布请求
将HTTP标头添加到我们的POST请求中非常容易。只需将标题添加到配置
//sending a post request
axios({
method: 'post',
url: '/addCandy',
data: {
candyName: 'Mars Bar',
quantity: '24'
},
headers: {'X-Custom-Header': 'foobar'}
}).then(function(response){
console.log(response)
});
使用帖子处理错误并获取请求
使用Axios处理错误请求非常容易。这是如何处理Axios
的错误请求的示例
//sending a post request
axios({
method: 'post',
url: '/addCandy',
data: {
candyName: 'Mars Bar',
quantity: '24'
}
}).catch(function (error) {
if(error.response){
// the request was made and the server responded with the response code that is out of 2xx
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
} else if (error.request) {
// the request was made but no response was recieved the `error.request` is an instance of XMLHttpRequest in the browser and a instance of http.ClientRequet in Node.Js
console.log(error.request);
}else {
// Something happened that triggered an error
console.log('error', error.message);
}
console.log('err',error.config);
});
我们在这里做什么
我们正在使用Axios发送发布请求并捕获其错误发生
如果错误具有2XX成功代码中的响应代码,则我们正在记录服务器返回的数据,响应代码和HTTP标头,以更好地了解为什么发生错误
如果我们发送的请求有一些问题,那么我们将其记录到控制台
如果请求或响应没有问题,并且还有其他错误,而我们也将其记录到控制台
最后,如果配置有问题,那么我们将其记录到控制台
VAILATETESTATUS配置选项
使用ValidateStatus配置选项,我们可以定义应该丢弃错误的HTTP代码。例如
axios.get('/get-candies', {
validateStatus: function (status) {
return status < 500; // Resolve only if the status code is less than 500
}
})
使用Tojson
如果您需要有关HTTP错误代码的更多信息,则可以使用TOJSON函数将错误代码转换为JSON。
这将为您提供有关错误的更多信息。
axios.get('/get-candies')
.catch(function (error) {
console.log(error.toJSON());
});
用JSON与Axios获取请求
首先让我们将Axios添加到我们的项目
const axios = require('axios').default;
,让我们提出请求
// Make a request for candies
axios.get('/get-candies')
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
我们正在向url'/get-candies'提出请求,以获取服务器的糖果列表。然后,我们正在记录从服务器到控制台的响应。
服务器可能会以糖果列表以及2XX响应代码的形式为我们提供数据,或者服务器可能会给我们一个错误
如果服务器给我们一个错误,我们将该错误记录到控制台
现在,我们可能要在我们的请求中添加params,例如
// Make a request forcandies from a brand name
axios.get('/get-candies?brand="mars"')
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
现在,我们添加了一个params,例如?parametername = value
我们还可以使用替代方法
提出GET请求
axios.get('/user', {
params: {
ID: 12345
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})
.then(function () {
// always executed
});
此方法与以前的方法相似,唯一的是我们对可读性有所更改的配置,并且在发送请求时,更容易传递多个参数
使用异步/等待Axios获得请求
使用异步 /等待关键字提出请求也很容易。请记住,尽管像IE这样的较旧浏览器不支持异步关键字。
var candies = async function getCandies() {
try {
const response = await axios.get('/user?ID=12345');
console.log(response);
} catch (error) {
console.error(error);
}
}
这样,我们可以使用异步 /等待关键字发送获取请求< / p>
ðâ
DeadSimplechat的新手?这是转弯键聊天,您可以轻松地将其添加到网站或应用程序中,而无需任何复杂的代码。对于虚拟 /现场活动,SaaS应用程序,社交平台,教育,游戏,金融注册免费< / p>
拦截REQ和RES
您可以拦截他们处理的请求或响应,或者捕获
创建一个像
// Add a request interceptor
axios.interceptors.request.use(function (config) {
// Do something before request is sent
return config;
}, function (error) {
// Do something with request error
return Promise.reject(error);
});
,如果您需要添加响应拦截器,则
// Add a response interceptor
axios.interceptors.response.use(function (response) {
// Any status code that lie within the range of 2xx cause this function to trigger
// Do something with response data
return response;
}, function (error) {
// Any status codes that falls outside the range of 2xx cause this function to trigger
// Do something with response error
return Promise.reject(error);
});
如果您需要以后在代码中删除拦截器
const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);
响应模式
请求的响应模式如下。您可以使用响应模式来记录与您相关的信息
{
// Response provided by the server is data
data: {},
// HTTP code sent by the server is status
status: 200,
// `headers` the HTTP headers that the server responded with
// All header names are lower cased and can be accessed using the bracket notation.
// Example: `response.headers['content-type']`
headers: {},
// `config` is the config that was provided to `axios` for the request
config: {},
// `request` is the request that generated this response
// It is the last ClientRequest instance in node.js (in redirects)
// and an XMLHttpRequest instance in the browser
request: {}
}
您可以记录与您相关的信息
axios.get('/candies')
.then(function (response) {
console.log(response.data);
console.log(response.status);
console.log(response.statusText);
console.log(response.headers);
console.log(response.config);
});
如何取消请求
您可以使用abortcontroller取消Axios请求
const controller = new AbortController();
axios.get('/candies', {
signal: controller.signal
}).then(function(response) {
//...
});
// cancel the request
controller.abort()
注意Canceltoken API自版本V0.22.0以来已被编写,并且不再使用较新版本
URL编码而不是JSON
默认情况下,Axios在JSON中序列化的主体对象,但是如果您希望在应用程序/X-WWW-Form-urlenced中发送请求,则可以使用以下选项
进行操作在浏览器中
const params = new URLSearchParams()
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/send-candy',params);
请注意,所有浏览器都不支持urlsearchparams
在node.js中
使用Querystring模块您可以发送请求,例如
const querystring = require('querystring');
axios.post('https://candies.com/', querystring.stringify({ candy: 'mars bar' }));
结论
在本文中,我用示例解释了如何发送帖子并获得Axios
的请求