分爲 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();
封裝好後,小程序的請求,你們有沒有以爲開發跟之前跟後端對接的形式同樣
這是用雲開發開發的小程序,能夠參考一下