乐趣区

关于javascript:微信小程序云开发云函数路由担心云函数不够用的可以看下这里

一 首先咱们看下云函数构造

分为 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.js

 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.js

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.js

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 开发

目录构造如下

首先我封装一个申请工具
request.js

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(); 


封装好后,小程序的申请,大家有没有感觉开发跟以前跟后端对接的模式一样

这是用云开发开发的小程序,能够参考一下

退出移动版