Vue全家桶-前后端交互

一、前后端交互模式

1.接口调用方式:

原生ajax,

基于jQuery的Ajax

fetch

axios

2.URL地址格式

①传统形式的url

格式:

Schema://host:port/path?query#fragent

Schema-协议,http,https,ftp等

host-域名或ip地址

port-端口,http默认端口是80,可以省略

path-路径

query-查询参数,例uname=li

frament-锚点,hash,用于定位页面的某个位置

②Restful形式的URL

HTTP请求方式

GET 查询

POST 添加

PUT  修改

DELETE  删除

符合规则的url地址

http://www.hello.com/books  GET

http://www.hello.com/books  POST

http://www.hello.com/BOOKS/123  PUT

http://www.hello.com/BOOKS/123  DELETE

二、Promise用法

1.异步调用

异步效果分析:

定时任务

Ajax

事件函数

多次异步调用的依赖分析,多次异步调用的结果顺序不确定,异步调用结果如果存在依赖需要嵌套

2.Promise概述

Promise是异步编程的一种解决方案,从语法上讲promise是一个对象,从它可以获取异步操作的消息,好处:可以避免多层异步调用嵌套问题

Promise对象提供了简洁的API,使得控制异步操作更加容易。

三、接口调用-fetch用法

1.fetch概述

基本特性,更加简单的数据获取方式,功能更强大,更灵活,可以看做是xhr的升级版。

基于Promise实现。

语法:

fetch(url).then(fn2)

          .then(fn3)

          .then(fn)

          ....

          .catch(fn)

2.fetch基本用法

fetch('/abc').then(data => {

      return data.text();//text()属于fetch API的一部分,返回值是一个Promise实例对象,用于获取后台返回的数据

      }).then(ret => {

      //注意这里是得到的最终的数据

          console.log(ret)

})

示例

fetch('http://localhost:3000/fdata').then(function (data){

      return data.text();

}).then(function(data){

    console.log(data);

})

3.fetch请求参数

①常用配置选项

method(String):http请求默认方法,默认为GET(GET,POST,PUT,DELETE)

body(String):http的请求参数

headers(Object):http的请求头,默认为 {}

fetch('/abc',{

    method: 'get'

}).then(data => {

    return data.text();

}).then(ret => {

  //注意这里得到的才是最终的数据

    console.log(ret);

});

②GET请求方式的传递参数

fetch('/abc?id=123').then(data => {

    return data.text();

}).then(ret =>{

//注意这里得到的才是最终的数据

    console.log(ret);

});

fetch('/abc/123',{

    method: 'get'

}).then(data => {

    return data.text();

}).then(ret => {

  //注意这里得到的才是最终的数据

    console.log(ret);

});

③DELETE请求方式传递参数

fetch('/abc/123',{

    method: 'delete'

}).then(data => {

    return data.text();

}).then(ret => {

  //注意这里得到的才是最终的数据

    console.log(ret);

});

④POST请求方式的传递参数

fetch('/books',{

    method: 'post',

    body:'uname=lisi&pwd=123',

    headers: {

      'Content-Type': 'application/x-www-form-urllencoded',

}

}).then(data => {

    return data.text();

}).then(ret => {

    console.log(ret);

});

⑤PUT请求方式传递参数

fetch('/books/123',{

    method: 'put',

    body: JSON.stringify({

      uname:'lisi',

      age:12

    })

    headers: {

      'Content-Type': 'applicatio/json',

}

}).then(data => {

    return data.text();

}).then(ret => {

    console.log(ret);

});

4.fetch响应结果

响应数据格式

text()  将返回体处理成字符串类型

json()  返回结果和JSON.parse(responeseText)一样。

fetch('/abc').then(data =>{

    return data.json();

}).then(ret =>{

    console.log(ret);

});

四、接口调用-axios用法

axios是用于调用后台接口的js库

1.axios的基本特性

axios是一个基于Promise用于浏览器和node.js的http客户端。官网https://github.com/axis/axios

具有以下特性

支持浏览器和node.js

支持promise

能拦截请求和响应

自动转换JSON数据

2.axios的基本用法

先引入axios.js

axios.get('/adata')

    .then(ret => {

    //data属性名称是固定的,用于获取后台响应的数据

    console.log(ret.data);

})

3.axios常用API

get  查询数据

post  添加数据

put  修改数据

delete  删除数据

4.axios的参数传递

① GET传递参数

通过url传递参数

通过params选项传递参数

app.get('/axios',(req,res) =>{

    res.send('axios get 传递参数'+req.query.id)

})

axios.get('/axios?id=123')

      .then(ret=>{

          console.log(ret.data)

      })

app.get('/axios/:id',(req,res) =>{

    res.send('axios get (Restful) 传递参数'+req.params.id)

})

axios.get('/axios/123')

      .then(ret=>{

          console.log(ret.data)

      })

通过params选项传递参数-比较方便

app.get('/axios',(req,res) =>{

    res.send('axios get 传递参数'+req.query.id)

})

axios.get('/axios',{

    params : {

      id :123

    }

  })

    .then(ret=>{

    console.log(ret.data)

})

②DELETE传递参数-与GET传参类似

app.delete('/axios',(req,res) =>{

    res.send('axios delete 传递参数'+req.query.id)

})

axios.delete('/axios?id=123')

      .then(ret=>{

          console.log(ret.data)

      })

app.delete('/axios/:id',(req,res) =>{

    res.send('axios delete(Restful)传递参数'+req.params.id)

})

axios.delete('/axios/123')

      .then(ret=>{

          console.log(ret.data)

      })

通过params选项传递参数-比较方便

app.delete('/axios',(req,res) =>{

    res.send('axios delete 传递参数'+req.query.id)

})

axios.delete('/axios',{

    params : {

      id :123

    }

  })

    .then(ret=>{

    console.log(ret.data)

})

③POST传递参数

通过选项传递参数(默认传递的是json格式的数据)

app.post('/axios',(req,res)=>{

  res.send('axios post 传递参数'+ req.body.name)

})

axios.post('/axios',{

    uname:'tom',

    pwd:123

}).then(ret => {

    console.log(ret.data)

})

通过URLSearchParams传递参数(application/x-www-form-urllencoded)

const params = new URLSearchParams();

params.append('uname', 'zhngsan');

params.append('pwd', '123');

axios.post('/axios',params).then(ret =>{

    console.log(ret.data)

})

④PUT传递参数

参数传递方式与POST类似

app.put('/axios:id',(req,res)=>{

  res.send('axios put 传递参数'+ req.params.id+req.body.name)

})

axios.put('/axios/123',{

    uname:'tom',

    pwd:123

}).then(ret => {

    console.log(ret.data)

})

通过URLSearchParams传递参数(application/x-www-form-urllencoded)

const params = new URLSearchParams();

params.append('uname', 'zhngsan');

params.append('pwd', '123');

axios.put('/axios',params).then(ret =>{

    console.log(ret.data)

})

5.axios的响应结果

响应结果的主要属性

data:实际响应回来的数据

headers:响应头信息

status:响应状态码

statusText:响应状态信息

axios.post('/axios-json').then(ret=>{

console.log(ret)

})

6.axios的全局配置

axios.defaults.timeout = 3000; //超时时间

axios.defaults.baseURL = 'http://localhost:3000/app'; //默认地址,配置信息基准地址

axios.defaults.headers[ 'mytoken' ] = aqwerwqwerqwer2ewrwe23eresdf23' //设置请求头

7.axios拦截器

①请求拦截器

在请求发出之前设置一些信息

axios  请求拦截器    --->服务器

添加一个请求拦截器

axios.interceptors.request.use(function(config){

    config.headers.mytoken='nihao';

  //在请求发出之前进行一些信息设置

  return config;

},function(err) {

  //处理响应的错误信息

});

axios.get('http://localhost:3000/adata').then(function(data){

  console.log(data);

})

②响应拦截器

在获取数据之前对数据做一些加工处理

axios 响应拦截器 <----服务器

添加一个响应拦截器

axios.interceptors.response.use(function(res){

  //在这里对返回的数据进行处理

  var data = res.data;

  return data;

},function(err) {

  //处理响应的错误信息

});

axios.get('http://localhost:3000/adata').then(function(data){

  console.log(data);

})

五、接口调用-async/await用法

1.async/await基本用法

async/await是ES7引入的新语法,可以更加方便的进行异步操作

async关键字用于函数上(async函数的返回值是Promise实例对象)

await关键字用于await函数中(await可以得到异步的结果)

async function queryData(id) {

    const ret = await axios.get('/data/');

    return ret;

}

queryData.then(ret=>{

    console.log(ret);

})

2.async/await处理多个异步请求

多个异步请求的场景

async function queryData(id) {

    const info = await axios.get('/async1');

    const ret = await axios.get('/async2?info='+info.data);

    return ret;

}

queryData.then(ret=>{

    console.log(ret)

})

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345