利用Cloudbase云开发下的云函数部署后端
腾讯云基于微信小程序的开发需求推出了Cloudbase云开发环境,CloudBase是腾讯云为移动开发者提供的一站式后端云服务,它旨在实现一个云原生一体化应用开发平台,快速构建小程序、Web、移动应用。在Cloudbase环境下,我们通常会使用云函数来处理各种类型的请求和事件。与SCF云函数相比,Cloudbase提供了更具价格优势的云函数服务。然而,Cloudbase的云函数与SCF相比存在一个明显的劣势,那就是它是基于事件而非Web的函数。这在当今普遍需要兼容Web的场景下显得有些棘手。
但回顾SCF产品早期的发展,我们可以发现最初它并不支持通过Web请求触发的功能:
事件驱动的函数通常会把http请求封装到一个json中称为集成请求,也就是说,可以提供读取集成请求的参数值而进行web事件的处理,可行但不优雅,而且这相当于每一个事件的操作要直接写http请求处理的每一个过程,对开发效率、体验以及代码管理都造成了很大的困扰。或者开发或寻找一个适配器,把集成请求重新封装为http请求。经查询历史文档与产品调研,我找到了解决方案
serverless-http
这个包实现了将event函数的集成请求封装为web请求。这使我们保持原web应用开发习惯成为了可能。通过这种方式,我们可以更加灵活地利用云函数,满足不同场景下的需求。
示例
index.js
// index.js
"use strict";
const Koa = require("koa");
const bodyParser = require("koa-bodyparser");
const serverless = require("serverless-http");
const tcb = require("@cloudbase/node-sdk");
const cloud = tcb.init({
env: tcb.SYMBOL_CURRENT_ENV,
});
const db = cloud.database();
const _ = db.command;
const app = new Koa();
app.use(bodyParser());
app.use(async (ctx, next) => {
let {
username,
password,
} = ctx.request.body;
console.log(username,password)
const res = await db.collection("user").where({
password: password,
username: username,
}).get().then((set) => {
console.log(set);
return set.data[0]
})
ctx.body = res;
await next();
});
exports.main = serverless(app);
package.json
// package.json
{
"name": "app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {},
"author": "",
"license": "ISC",
"dependencies": {
"@cloudbase/node-sdk": "latest",
"koa": "^2.15.0",
"koa-bodyparser": "^4.4.1",
"koa-router": "^12.0.1",
"serverless-http": "^3.2.0"
}
}
Comments
Leave a comment