利用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