//在config/index.js
// 请求的基本路径
const baseURL = process.env.NODE_ENV === "development" ?
"http://192.168.1.188:8080"://测试环境(请求接口的代理路径)
"http://zxwyit.cn:8080";//上线环境
export {baseURL}
// 引入基路径
import {
baseURL
} from "@/config/index.js"
const http = uni.$u.http
// 初始化请求配置
http.setConfig((config) => {
/* config 为默认全局配置*/
config.baseURL = baseURL /* 根域名 */
config.header = {//设置请求头类型,这里是form类型,要看接口文档才能确定是什么类型
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
return config
})
// 请求拦截
http.interceptors.request.use((config) => { // 可使用async await 做异步操作
let strUser = uni.getStorageSync("user")//"user"是登入成功后存储的用户信息,存储为了字符串
let objUser = strUser ? JSON.parse(strUser) : {}//判断存不存在user,转为对象形式,否则{},{}是为了防止空指针
config.header.accessToken = objUser.accessToken;//获取token值
return config
}, config => { // 可使用async await 做异步操作
return Promise.reject(config)
})
// 响应拦截
http.interceptors.response.use((response) => {
/* 对响应成功做点什么 可使用async await 做异步操作*/
let data = response.data//这里做浅解,可以做也可以不做,做了以后请求数据后赋值就少写一个data
const {
errmsg,
errno
} = data;
if (200 !== errno) {
return Promise.reject(data); //返回错误,通过catch来处理错误
}
return data
}, (response) => {
// 对响应错误做点什么 (statusCode !== 200)
return Promise.reject(response)
})
//封装post请求
function post(_gp, _mt, data = {}, params = {}) {
return http.post("/m.api", {
_gp,
_mt,
...data
},{
...params
})
}
//封装get请求
function get(_gp, _mt, params={}) {
return http.post("/m.api", {
_gp,
_mt,
...params
})
}
//暴露封装的函数
export {post,get}
在页面文件中
import {post,get} from "@/uilt/http.js"//引入封装的请求方式
//第一个参数是_gt,第二个参数是_mt,第三个参数是需要传递的数据
login(){
let data ={
phone:this.phone
password:this.password
}
post("user", "login", data).then(res => {
console.log(res, "登入成功");
uni.showToast({
icon: "success",
title: res.data.errmsg,
duration: 1000
})
setTimeout(function() {
uni.switchTab({
url: '/pages/index/index'
});
}, 1000);
}).catch(err => {
uni.showToast({
icon: "error",
title: err.errmsg,
duration: 1000
})
})
}
该请求的封装方式适用于_gt、_mt类型的请求,应该也可以做到其他类型;
注意看代码中的注释
在uilt/api.js中
const url = "http://localhost:8086/"//设置基路径(代理路径)
// 登入页面相关的所有接口
//登入
export const loginpath = url + "login"
// 退出登入
export const logoutpath = url + "logOut"
// 注册
export const registerpath = url + "user/register"
在uilt/http.js中
// 封装请求
function request(url,method = "get",data = {}) {
return new Promise((resolve, reject) => {
uni.request({
url,
data,
method,
header: {
// 'Accept': '*/*',
// 'Content-Type': 'application/json',//类型
"Authorization": uni.getStorageSync('token')//请求头
},
success: (res) => {
resolve(res)
},
fail: (err) => {
reject(err)
}
})
})
}
export {
request
}
在页面文件中
注意看代码中的注释;不封装需要使用 uni.request这个API来进行请求
// 注册
registerUser(){
let data = {
phone:this.form.phone,
password:this.form.password,
verifyCode:this.verifyCode
}
if(data.password==''||data.verifyCode==''||data.phone==''){
uni.showToast({
icon: "error",
title: "验证码/手机号/密码不能为空",
duration: 1000
})
return
}
uni.request({
url: 'http://192.168.1.188:8080/m.api',//请求路径
data: {//传递的数据
_gp: "user",
_mt: 'register',
...data
},
method: "POST",//请求方式
header: {//请求头配置
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',//设置请求类型,到接口文档中找
"AccessToken":uni.getStorageInfoSync("token")//根据需求是否需要添加token
},
success: (res) => {//请求成功后的回调
let data = res.data
console.log(res, "注册成功");
if (200 === data.errno) {
this.verifyCode = data.data
}else{
uni.showToast({
icon: "error",
title: data.errmsg,
duration: 1000
})
}
},
fail: (err) => {//请求失败后的回调
uni.showToast({
icon: "error",
title: err,
duration: 1000
})
}
})
}