通常狀況下,一個雲函數完成單一的邏輯功能,就是一個類的方法同樣,如圖:node
可是受限免費用戶最多隻能使用20個雲函數,想要在單一雲函數中實現多個複雜的功能就須要經過參數來區別,可讀性差,不利於管理。經過路由,嘗試將請求歸類,一個雲函數處理某一類的請求,好比有專門負責處理用戶的,或者專門處理支付的雲函數。如圖: npm
爲了方便你們試用,騰訊雲 Tencent Cloud Base 團隊開發了 tcb-router,雲函數路由管理庫方便你們使用。 基於 koa 風格的小程序·雲開發雲函數輕量級類路由庫,主要用於優化服務端函數處理邏輯 小程序
使用 數組
npm install --save tcb-router複製代碼
// 雲函數的 index.js
const TcbRouter = require('./router');
exports.main = (event, context) => {
const app = new TcbRouter({ event });
// app.use 表示該中間件會適用於全部的路由
app.use(async (ctx, next) => {
ctx.data = {};
await next(); // 執行下一中間件
});
// 路由爲數組表示,該中間件適用於 user 和 timer 兩個路由
app.router(['user', 'timer'], async (ctx, next) => {
ctx.data.company = 'Tencent';
await next(); // 執行下一中間件
});
// 路由爲字符串,該中間件只適用於 user 路由
app.router('user', async (ctx, next) => {
ctx.data.name = 'heyli';
await next(); // 執行下一中間件
}, async (ctx, next) => {
ctx.data.sex = 'male';
await next(); // 執行下一中間件
}, async (ctx) => {
ctx.data.city = 'Foshan';
// ctx.body 返回數據到小程序端
ctx.body = { code: 0, data: ctx.data};
});
// 路由爲字符串,該中間件只適用於 timer 路由
app.router('timer', async (ctx, next) => {
ctx.data.name = 'flytam';
await next(); // 執行下一中間件
}, async (ctx, next) => {
ctx.data.sex = await new Promise(resolve => {
// 等待500ms,再執行下一中間件
setTimeout(() => {
resolve('male');
}, 500);
});
await next(); // 執行下一中間件
}, async (ctx)=> {
ctx.data.city = 'Taishan';
// ctx.body 返回數據到小程序端
ctx.body = { code: 0, data: ctx.data };
});
return app.serve();
}複製代碼
tips: 小程序雲函數的 node 環境默認支持 async/await 語法,推薦涉及到的異步操做時像 demo 中那樣使用bash
// 調用名爲 router 的雲函數,路由名爲 user
wx.cloud.callFunction({
// 要調用的雲函數名稱
name: "router",
// 傳遞給雲函數的參數
data: {
$url: "user", // 要調用的路由的路徑,傳入準確路徑或者通配符*
other: "xxx"
}
});複製代碼
完整的實例,請參考個人另外一篇博客: 分享使用tcb-router路由開發的雲函數短信平臺SDK
app