微信小程序雲開發雲函數路由,擔憂雲函數不夠用的能夠看下這裏

一 首先咱們看下雲函數結構

在這裏插入圖片描述

分爲 controllers 控制器 service 服務邏輯 utils 工具類前端

二 修改入口文件根據不一樣路由進入不一樣的文件

// 雲函數入口文件
const cloud = require('wx-server-sdk')
const response = require('./utils/response')

cloud.init()

// 雲函數入口函數
exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
//這個是重點,小程序傳過來的時候要帶 controller 控制器和 action 函數名過來
    if (!event.controller || !event.action) {
        return response.error()
    }
    try {
         //根據不一樣的控制器,引入不一樣的控制器文件
        const server = require('./controllers/' + event.controller)
        //調用控制器裏面的方法
        return server.getInstance({
            router: event.controller + '/' + event.action,
            event: event
        })[event.action]()

    } catch (e) {
            return response.error('系統錯誤')


    }


}

重點是前端得傳 controller 和 action 過來,而後根據不一樣的控制器和函數名調用不一樣的文件小程序

裏面出現的response文件,我也先給你們看下,避免不知道是什麼意思後端

這個返回信息的封裝 response.jsapi

module.exports = {
   success: function (msg = '成功', result = {}, status = 0) {

     return {
       msg: msg,
       result: result,
       status: status
     }
   },
   error:function (msg = '失敗', result = {}, status = -1) {

    return {
      msg: msg,
      result: result,
      status: status
    }
  }
 }

三 首先建立一個基礎控制器

之後一些掛載函數能夠在裏頭掛載
登陸的控制器 Base.jsapp

const cloud = require('wx-server-sdk')
cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const response = require('../utils/response');



class Base {
    //構造函數方法
    constructor(option={}) {
        this.response = response
        this.request = option.event
        this.router = option.router
        
    }
    static getInstance(option={}) {
        if (!this.instance) {
            this.instance = new this(option);
        }

        return this.instance;
    }

    

}

module.exports = Base;

四 能夠開始寫控制器方法了

好比寫個獲取商品列表的控制器Goods.jsasync

const Base = require('./Base')
class Goods extends Base {
    //構造函數方法
    constructor(option={}) {
        super(option);

    }
    async list() {
        //商品列表
        let list = [];
        
        
        return this.response.success('成功',{list:list });
    }    
    async add() {
        //添加商品

        
        
        return this.response.success('成功');
    }    
}

module.exports = Goods;

這樣一個獲取商品列表的連接就作好了,
若是要寫多其餘的功能,就在controller裏建js控制器,而後繼承base,就能夠了函數

五 小程序端的請求

我用的是Uniapp開發工具

目錄結構以下
在這裏插入圖片描述ui

首先我封裝一個請求工具
request.jsthis

export async function  request(url, data = {}) {

    const url_list = url.split('/')

    data.controller = url_list[0]
    data.action = url_list[1]
    

    return new Promise((r, s) => {
        

        wx.cloud.callFunction({
            // 雲函數名稱
            name: 'request',
            // 傳給雲函數的參數
            data: data,
            success: function(res) {
                let res_data = res.result
                
                
                r(res_data);
            },
            fail: function(res) {
                s(res);
            }
        })




    })
}

而後把全部要請求的接口寫在api.js文件裏

import {request} from "./request";

//商品列表
export function goodsList(data){
    return request('Goods/list',data);
}
//添加商品
export function goodsList(data){
    return request('Goods/add',data);
}

而後就能夠調用了

import {goodsList} from "@/api/api.js";

//就能夠拿到商品列表了
let list = await goodsList();

封裝好後,小程序的請求,你們有沒有以爲開發跟之前跟後端對接的形式同樣

這是用雲開發開發的小程序,能夠參考一下

在這裏插入圖片描述

相關文章
相關標籤/搜索