IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Promise和Axios使用 -> 正文阅读

[JavaScript知识库]Promise和Axios使用

1. Promise函数

支持函数异步操作,创建文件Permise-test.js,在``Terminal控制台使用node ./Permise-test.js` 执行本函数

//使用node的读取文件函数
const fs = require('fs')
//实例化 Promise 对象:
//Promise对象有三个状态:初始化、成功、失败
const p = new Promise((resolve, reject) => {
  //调用readFile方法读取磁盘文件:异步操作
  fs.readFile('./他.txt', (err, data) => {
    //当文件读取失败时,可以获取到err的值
    if (err) {
        reject(err) //reject将Promise对象的状态设置为失败
    }
    //当文件读取成功时,可以获取到data的值
    resolve(data) //resolve将Promise对象的状态设置为成功
  })
})

//调用 promise 对象的方法
//then:当 Promise状态成功时执行
//catch:当 Promise状态失败时执行
p.then(response => {
  console.log(response.toString())
}).catch(error => {
  console.log('出错了')
  console.error(error)
})

2. Axios的使用

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

官方网站:http://www.axios-js.com

1. 安装

npm install axios

2. 创建前端项目

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="../node_modules/axios/dist/axios.js"></script>
    <script>
        axios({
            url:'https://localhost:8080/user/list',
            method:"get"
        })    
    </script>
</body>
</html>

3. 创建后端项目

  1. 添加相关的依赖
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.3.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
    </dependency>
</dependencies>
  1. 添加User实体类
package net.lesscoding.entity;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * @author eleven
 * @date 2022/3/2$ 8:18$
 * @apiNote $
 */
@Data
@Accessors(chain = true)
public class User {

    private Long id;

    private String name;

    private Integer age;

    private String gender;
}
  1. 创建控制器
package net.lesscoding.controller;

import net.lesscoding.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Collections;
import java.util.List;

/**
 * @author eleven
 * @date 2022/3/2$ 8:17$
 * @apiNote $
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/list")
    public List<User> getUserList(){
        User user = new User();
        user.setId(1L).setName("zhangsan").setAge(18).setGender("男");
        return Collections.singletonList(user);
    }
}
  1. 启动项目,并使用Axios访问

4. 跨域

1.为什么会出现跨域?

处于浏览器的同源策略限制。所谓的同源(即指在同一个域)就是两个地址具有相同的协议(protocol)主机(host)和端口号(port)

跨域原因说明url1url2
域名不同www.jd.comwww.taobao.com
域名相同,端口不同www.jd.com:8080www.jd.com:8081
二级域名不同item.jd.commiaosha.jd.com
协议不同http://www.jd.comhttps://www.jd.com

2. 后端解决跨域问题

Spring框架提供了解决方案,只需要在对应的Controller添加相应的注解即可

@CrossOrigin
@RestController
@RequestMapping("/user")
public class UserController{}

5. 使用Promise分开处理成功和失败

因为Axios集成了Promise,所以可以直接进行使用

axios({
    url:'https://localhost:8080/user/list',
    method:"get"
})
    .then(resp => console.log('数据获取成功' + resp))
	.catch(err => console.log('数据获取失败' + err))

6. 自定义配置

1. 配置Axios实例

对Axios进行配置,简化代码的编写

const request = axios.create({
    baseURL:'http://localhost:8080',//主机地址
    timeout:1000,//超时时间 超时之后会有一次默认的重试
    headers:{'token': 'Bearer Token'}//统一token
})

2. 拦截器

在Axios请求或者响应被then或者catch处理之前拦截处理

1.请求拦截器

在发送axios请求之前,拦截请求,对请求做一些处理

//请求拦截器
request.interceptors.request.use(
	function(config){
        // 在发送请求之前添加参数,如在请求头添加一个token令牌
        config.headers.token = 'Bearer Token'
        return config
    },
    function(error){
    	//对请求的错误进行处理
    	return Promise.reject(error)
	}
)

2.响应拦截器

响应之前做处理

request.interceptors.response.use(
	function(response){
        //将response中的data取出来,方便前端操作
        return response.data
    },
    function(error){
        
        return Promise.reject(error)
    }
)
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:27:11  更:2022-03-04 15:29:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:30:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码