vue 调用 RESTful风格接口操作


Posted in Javascript onAugust 11, 2020

首先是简单的java接口代码

写了四个让前端请求的接口,以下为代码

@GetMapping("/v1/user/{username}/{password}")
  public Result login2(@PathVariable("username") String username, @PathVariable("password") String password){
    return Result.succResult(200,username+"--"+password);
  }
 
  @PostMapping("/v1/user")
  public Result login3(@RequestBody User user){
    return Result.succResult(200,"ok",user);
  }
 
  @PutMapping("/v1/user")
  public Result putUser(@RequestBody User user){
     return Result.succResult(200,user);
  }
 
  @DeleteMapping("/v1/user/{id}")
  public Result delete(@PathVariable Integer id){
    return Result.succResult(200,id);
  }

前端请求需要在main.js中配置

import Axios from 'axios' Vue.prototype.$axios = Axios

前端请求方式如下

在调用的时候用以下方式进行请求

this.$axios.get('/api/v1/user/'+this.username+'/'+this.password)
        .then(data=> {
          alert('get//'+data.data.code);
        }).catch(error=> {
         alert(error);
        });
 
      this.$axios.get('/api/v1/user',{
        params: {
          username: this.username,
          password: this.password
        }
      }).then(data =>{
        alert('get'+data.data.data)
      }).catch(error => {
        alert(error)
      });
 
      this.$axios.put('/api/v1/user',{
        id: 1,
        username: this.username,
        password: this.password
      }).then(data => {
        alert('数据password:'+data.data.data.password)
        alert('数据username:'+data.data.data.username)
      }).catch(error => {
        alert(error)
      });
 
      this.$axios.delete('/api/v1/user/1')
        .then(data=> {
          alert('delete//'+data.data.code);
        }).catch(error=> {
         alert(error);
        });
        
      this.$axios.post('/api/v1/user',{
        username: this.username,
        password: this.password
      }).then(data => { 
        alert('post'+data.data.data.password)
      }).catch(error => {
        alert(error);
      });

补充知识:vue结合axios封装form,restful,get,post四种风格请求

axios特点

1.从浏览器中创建 XMLHttpRequests

2.从 node.js 创建 http 请求

3.支持 Promise API

4.拦截请求和响应 (就是有interceptor)

5.转换请求数据和响应数据

6.取消请求

7.自动转换 JSON 数据

8.客户端支持防御 XSRF

安装

npm i axios?save
npm i qs --save
npm i element-ui --save
npm i lodash --save

引入

1.在入口文件中引入所需插件

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import url from './apiUrl'
import api from './apiUtil'

Vue.prototype.$axios = api.generateApiMap(url);
Vue.config.productionTip = false

Vue.use(ElementUI);
new Vue({
 router,
 store,
 render: h => h(App)
}).$mount('#app')

2.新建一个util文件夹(只要存放工具类)

在util中建apiUtil.js , apiUrl.js两个文件

apiUtil.js 封装请求体

import axios from 'axios'
import _ from 'lodash'
import router from '@/util/baseRouter.js'
import { Message } from 'element-ui'
import qs from 'qs'

const generateApiMap = (map) => {
 let facade = {}
 _.forEach(map, function (value, key) {
  facade[key] = toMethod(value)
 })
 return facade
}

//整合配置
const toMethod = (options) => {
 options.method = options.method || 'post'
 return (params, config = {}) => {
  return sendApiInstance(options.method, options.url, params, config)
 }
}

// 创建axios实例
const createApiInstance = (config = {}) => {
 const _config = {
  withCredentials: false, // 跨域是否
  baseURL: '',
  validateStatus: function (status) {
   if(status != 200){
    Message(status+':后台服务异常')
   }
   return status;
  }
 }
 config = _.merge(_config, config)
 return axios.create(config)
}

//入参前后去空格
const trim = (param) =>{
 for(let a in param){
  if(typeof param[a] == "string"){
   param[a] = param[a].trim();
  }else{
   param = trim(param[a])
  }
 }
 return param
}

//restful路径参数替换
const toRest = (url,params) => {
 let paramArr = url.match(/(?<=\{).*?(?=\})/gi)
 paramArr.forEach(el=>{
  url = url.replace('{'+el+'}',params[el])
 })
 return url
}

//封装请求体
const sendApiInstance = (method, url, params, config = {}) => {
 params = trim(params)
 if(!url){
  return
 }
 let instance = createApiInstance(config)
 //响应拦截
 instance.interceptors.response.use(response => {
   let data = response.data //服务端返回数据
   let code = data.meta.respcode //返回信息状态码
   let message = data.meta.respdesc //返回信息描述
   if(data === undefined || typeof data != "object"){
    Message('后台对应服务异常');
    return false;
   }else if(code != 0){
    Message(message);
    return false;
   }else{
    return data.data;
   }
  },
  error => {
   return Promise.reject(error).catch(res => {
    console.log(res)
   })
  }
 )
 //请求方式判断
 let _method = '';
 let _params = {}
 let _url = ''
 if(method === 'form'){
  _method = 'post'
  config.headers = {'Content-Type':'application/x-www-form-urlencoded'}
  _params = qs.stringify(params)
  _url = url
 }else if(method === 'resetful'){
  _method = 'get'
  _params = {}
  _url = toRest(url,params)
 }else if(method === 'get'){
  _method = 'get'
  _params = {
   params: params
  }
  _url = url
 }else if(method === 'post'){
  _method = 'post'
  _params = params
  _url = url
 }else{
  Message('请求方式不存在')
 }
 return instance[_method](_url, _params, config)

}

export default {
 generateApiMap : generateApiMap
}

apiUrl.js 配置所有请求路径参数

其中resetful风格请求的路径中的请求字段必须写在 ‘{}'中

const host= '/api' //反向代理
export default {
 userAdd:{ url: host + "/user/add", method:"post" },
 userList:{ url: host + "/user/userList", method:"get" },
 userInfo:{ url: host + "/user/userInfo/{id}/{name}", method:"resetful"},
 userInsert:{ url: host + "/login", method:"form"},
}

使用

四种请求方式的入参统一都以object形式传入

APP.vue

<template>
 <div class="login">
    <el-button type="primary" @click="submitForm" class="submit_btn">登录</el-button>
 </div>
</template>
<script>
export default {
 data() {
  return {
  };
 },
 methods:{
  submitForm(){
   this.$axios.userAdd({
    id:'123',
    name:'liyang'
   }).then(data=>{
    console.log(data)
   })
  }
 }
};
</script>

ps:入参也可以再请求interceptors.request中封装

以上这篇vue 调用 RESTful风格接口操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
疯掉了,尽然有js写的操作系统
Apr 23 Javascript
js 省地市级联选择
Feb 07 Javascript
jquery 插件学习(三)
Aug 06 Javascript
深入理解JS中的变量及作用域、undefined与null
Mar 04 Javascript
Jquery网页内滑动缓冲导航的实现代码
Apr 05 Javascript
jQuery实现的向下图文信息滚动效果
May 03 Javascript
学习vue.js表单控件绑定操作
Dec 05 Javascript
详谈jQuery中的一些正则匹配表达式
Mar 08 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
Oct 12 Javascript
小程序和web画三角形实现解析
Sep 02 Javascript
jQuery实现动态向上滚动
Dec 21 jQuery
vue之封装多个组件调用同一接口的案例
Aug 11 #Javascript
vue接口请求加密实例
Aug 11 #Javascript
vue组件暴露和.js文件暴露接口操作
Aug 11 #Javascript
vue npm install 安装某个指定的版本操作
Aug 11 #Javascript
小程序自动化测试的示例代码
Aug 11 #Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
Aug 11 #Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
Aug 11 #Javascript
You might like
强烈推荐:php.ini中文版(2)
2006/10/09 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
基于php实现的验证码小程序
2016/12/13 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
python基础教程之字典操作详解
2014/03/25 Python
编写Python CGI脚本的教程
2015/06/29 Python
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
python与sqlite3实现解密chrome cookie实例代码
2018/01/20 Python
Python 脚本获取ES 存储容量的实例
2018/12/27 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
Myholidays美国:在线旅游网站
2019/08/16 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
卫校护理专业毕业生求职信
2013/11/26 职场文书
高级销售求职信
2014/02/21 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
党员自我评价2015
2015/03/03 职场文书
社区宣传标语口号
2015/12/26 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
python画条形图的具体代码
2022/04/20 Python