当前位置:   article > 正文

微信小程序请求封装_微信小程序如何封装request

微信小程序如何封装request

官方给出请求方式为

详情参见这里

  1. wx.request({
  2. url: "请求地址",
  3. method: "请求方式",
  4. header: {
  5. "content-type": "application/json", // 默认
  6. },
  7. success: function (res) {}, // 成功调用
  8. fail: function(res){}, // 失败调用
  9. complete: function(res){}, // 调用结束回调函数(成功失败都执行)
  10. });

通常项目中会有很多需要请求的接口

我们每次都需要写这些参数的话就很麻烦

那么微信小程序会不会有类似vue中axios那样的东西呢

推荐两个自己封装的请求


第一种

在小程序目录下建立 api 文件夹,并在文件夹下创建 api.js 脚本。下面开始封装 wx.request

  1. const app = getApp()
  2. const request = (url, options) => {
  3. return new Promise((resolve, reject) => {
  4. wx.request({
  5. // {app.globalData.host}为接口请求中的公共部分写在app.js中
  6. url: `${app.globalData.host}${url}`,
  7. method: options.method,
  8. data: options.method === 'GET' ? options.data : JSON.stringify(options.data),
  9. header: {
  10. 'Content-Type': 'application/json; charset=UTF-8',
  11. },
  12. success(request) {
  13. if (request.data.code === 2000) {
  14. resolve(request.data)
  15. } else {
  16. reject(request.data)
  17. }
  18. },
  19. fail(error) {
  20. reject(error.data)
  21. }
  22. })
  23. })
  24. }
  25. const get = (url, options = {}) => {
  26. return request(url, { method: 'GET', data: options })
  27. }
  28. const post = (url, options) => {
  29. return request(url, { method: 'POST', data: options })
  30. }
  31. const put = (url, options) => {
  32. return request(url, { method: 'PUT', data: options })
  33. }
  34. // 不能声明DELETE(关键字)
  35. const remove = (url, options) => {
  36. return request(url, { method: 'DELETE', data: options })
  37. }
  38. module.exports = {
  39. get,
  40. post,
  41. put,
  42. remove
  43. }

app.js

  1. //app.js
  2. App({
  3. onLaunch: function () {},
  4. globalData: {
  5. host: "http://XXXX.com/",
  6. },
  7. });

使用封装过后的 api

post 请求就是api.post()…,get 请求就是api.get()…

  1. import api from '../api/api'
  2. Page({
  3. data:{},
  4. onLoad: function () {
  5. this.getlist(); // 获取列表
  6. },
  7. getlist() {
  8. // 改变this指向
  9. let that = this;
  10. api.post('/api/admin/index', {data: ''})
  11. .then(res => {
  12. console.log(res)
  13. })
  14. .catch(err => {
  15. wx.showToast({
  16. title: err.message,
  17. })
  18. })
  19. },
  20. )}

第二种

  1. const GET = "GET";
  2. const POST = "POST";
  3. const PUT = "PUT";
  4. const FORM = "FORM";
  5. const DELETE = "DELETE";
  6. const baseURL = "http://XXXXXX.com/";
  7. let header = { "content-type": "application/json" };
  8. function request(method, url, data) {
  9. return new Promise(function (resolve, reject) {
  10. wx.request({
  11. url: baseURL + url,
  12. method: method,
  13. // get请求直接传就可以了,post请求JSON.stringify(data)一下
  14. data: method === POST ? JSON.stringify(data) : data,
  15. // dataType为官方给的方法,返回的数据为 JSON,返回后会对返回的数据进行一次 JSON.parse
  16. // dataType: "JSON",
  17. header: header,
  18. success(res) {
  19. //请求成功返回数据
  20. resolve(res);
  21. },
  22. fail(err) {
  23. //请求失败
  24. reject(err);
  25. console.log(err);
  26. wx.showToast({
  27. icon: "none",
  28. mask: true,
  29. title: "服务器出错了,请稍后再试",
  30. });
  31. },
  32. });
  33. });
  34. }
  35. // 请求不同的接口
  36. const API = {
  37. getList: () => request(GET, "api/commodity/showList"), //获取商品列表
  38. };
  39. module.exports = {
  40. API,
  41. };

页面中使用

  1. const api = require("../../utils/http").API;
  2. Page({
  3. data:{},
  4. onLoad: function () {
  5. this.getlist(); // 获取列表
  6. },
  7. getlist() {
  8. // 改变this指向
  9. let that = this;
  10. api.getshopList()
  11. .then((res) => {
  12. //请求成功
  13. that.setData({ list: res.data.data });
  14. })
  15. .catch((err) => {
  16. //请求失败
  17. });
  18. },
  19. )}

结束

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/677684
推荐阅读
相关标签
  

闽ICP备14008679号