接口调用方式
我们都知道一般我们前台获取的数据都是从后台获取的,我们一般采用下面几种方式调取后台接口数据:
- 原生js的AJAX
- jquery封装的AJAX(偏向于操作DOM,不适用于vue)
- fetch
- axios
promise
创建后端接口
我们先用node创建本地服务,代码如下:
- npm init -y
- npm install express@4.17.1
- npm install cors
const express = require("express");
const app = express();
const cors = require("cors");
app.use(cors());
app.get("/list", (req, res) => {
res.send("展示数据列表信息");
});
app.get("/add", (req, res) => {
res.send("添加列表内容");
});
app.get("/del", (req, res) => {
res.send("删除列表内容");
});
app.listen("3000", () => {
console.log("服务启动了 http://127.0.0.1:3000");
});
前端请求接口
<body>
<script src="jquery-3.6.0 .js"></script>
<script>
// 获取列表信息
$.ajax({
url: "http:127.0.0.1:3000/list",
type: "get",
data: {},
success: function(res) {
console.log(res);
// 实现添加功能
$.ajax({
url: "http:127.0.0.1:3000/add",
type: "get",
data: {},
success: function(res) {
console.log(res);
// 实现删除功能
$.ajax({
url: "http:127.0.0.1:3000/del",
type: "get",
data: {},
success: function(res) {
console.log(res);
}
});
}
});
}
});
</script>
</body>
promise基本用法
<script>
var p = new Promise(function(resolve, reject) {
resolve(); //成功时候调用的函数
reject(); //失败时候调用的函数
});
p.then(
function(res) {
从resolve处理函数得到的结果;
},
function(res) {
从reject处理函数得到的结果;
}
);
</script>
说明
- 如果异步处理函数中运行成功会自动调用resolve函数,如果运行失败会自动调用reject函数。
- 不管正确还是错误的处理结果都会在then方法中捕获到
promise常用API
promise实例常用方法:
- then是捕获上面运行正常的结果
- catch是捕获上面运行失败的结果
- finally是捕获不管运行成功还是失败都会执行的结果
promise对象常用方法:
Promise.all()处理多个异步并发任务,所有的任务都执行完毕才能获取结果
Promise.race()处理多个异步并发任务,只要有一个任务完成就能获取结果
fetch
fetch也是一种新的请求后台接口的方式,语法如下:
fetch(url)
.then(fn1)
.then(fn2)
.catch(fn3)
....
代码示例:
<script>
fetch("http://127.0.0.1:3000/list")
.then(function(data) {
return data.text();
})
.then(function(data) {
console.log(data);
});
</script>
axios
简介:
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
特性
- 从浏览器中创建 XMLHttpRequests
- 从 node.js 创建 http 请求
- 支持 Promise API
- 拦截请求和响应
- 自动转换 JSON 数据
基本语法
npm install axios
axios.get('/list').then(res=>{
res是后台响应的对象,res.data是获取后台返回的具体数据
)
axios基本API
axios中封装的有下面几个方法:
- get 查询
- post 添加
- delete 删除
- put 更新
get和delete请求
(1)问号传参
get和delete传参方式类似,我们以get请求为例演示:
比如前端发送数据如下:
<script>
axios.get("http://127.0.0.1:3000/list?id=1").then(function(res) {
console.log(res.data);
});
</script>
后端app.js接受传参如下:
app.get("/list", (req, res) => {
res.send("获取博客信息列表" + req.query.id);
});
(2)动态传参
前端代码如下:
<script>
axios.get("http://127.0.0.1:3000/list/1").then(function(res) {
console.log(res.data);
});
</script>
后端接口数据如下:
app.get("/list/:id", (req, res) => {
res.send("获取博客信息列表" + req.params.id);
});
(3)params传参
前端传参如下:
<script>
axios
.get("http://127.0.0.1:3000/list", {
params: {
id: 1,
name: "tom"
}
})
.then(function(res) {
console.log(res.data);
});
</script>
后端接收如下:
app.get("/list", (req, res) => {
res.send("获取博客信息列表" + req.query.id + req.query.name);
});
post和put请求
前端传参:
<script>
axios
.post("http://127.0.0.1:3000/add", {
username: "tom",
pass: "111"
})
.then(function(res) {
console.log(res.data);
});
</script>
后端接口获取数据(注意配置才能获取post请求的数据)
app.use(express.json());//后端配置获取post传递的json格式数据
app.post("/add", (req, res) => {
res.send("实现添加功能" + req.body.username + req.body.pass);
});
或者前端传递参数如下:
<script>
let params = new URLSearchParams();
params.append("username", "tom"); //参数1是设置传递的变量名 参数2是传递的值
params.append("pass", "111"); //参数1是设置传递的变量名 参数2是传递的值
axios.post("http://127.0.0.1:3000/add", params).then(function(res) {
console.log(res.data);
});
</script>
后端接口如下:
app.use(express.urlencoded({ extended: false }));//解析后传递格式是
app.post("/add", (req, res) => {
res.send("实现添加功能" + req.body.username + req.body.pass);
});
put请求类似比如要id为2的这条信息更新为username为jim,age=20,所以前端的请求代码如下:
<script>
axios
.put("http://127.0.0.1:3000/edite/2", {
username: "jim",
age: 20
})
.then(function(res) {
console.log(res.data);
});
</script>
后端代码如下:
app.use(express.json());
app.put("/edite/:id", (req, res) => {
res.send("实现更新功能" + req.body.username + req.body.age);
});
注意
我们上面的前端请求的接口地址每次都有一个前缀http://127.0.0.1:3000,为了更方便的进行代码管理,我们可以通过axios提供的一个方法设置访问的地址前缀:
比如上面的前端代码,我们如下操作会更加简洁
<script>
axios.defaults.baseURL = "http://127.0.0.1:3000/";
axios
.put("edite/2", {
username: "jim",
age: 20
})
.then(function(res) {
console.log(res.data);
});
</script>
async和await
async和await是es7引入的新语法,更加方便异步编程的调用
async用在函数前面,async函数的返回值prommise的实例对象
await关键字用于async函数中,主要是获取异步代码执行的结果。
原代码示例如下:
<script>
axios.defaults.baseURL = "http://127.0.0.1:3000/";
axios.get("list").then(function(res) {
console.log(res.data);
});
</script>
用async和await改造如下:
axios.defaults.baseURL = "http://127.0.0.1:3000/";
async function queryData() {
const res = await axios.get("list");
console.log(res);
}
queryData();