腾讯云函数开发初试

get 方法的云函数

我之前的博客有显示我的追番列表,所以想在这里也加个追番页面,想来这是 vue 的项目应该不会太麻烦,但实际上还是花了一点时间,毕竟是调B站的接口,不确定性还是有的。首先可以确定的是直接调是会跨域的,使用脚手架的代理可以解决跨域,试了之后发现还是会有 403 的问题,应该还是有 referrer 的问题,由于不想在前端伪装 referrer ,那只好在 node 上来调用这个接口了,想的是需要有个接口来进行转发,先在 node 上取到数据,然后返回给前端。整个后端项目来处理这事有点浪费,所以就想到用云函数来解决。由于之前使用过微信小程序的云开发,所以此次选择使用腾讯云开发来做,毕竟熟悉些。

新建云函数

建议大家在做开发之前先把相应的文档看下,能减少很多试错的时间。首先进入 云函数工作台open in new window ,如果找不到建议直接在搜索里搜 云函数 ,点击新建云函数

新建云函数

点击完成,此时一个最基础的 hello world 的云函数就创建成功了,然后下面我们来改写代码,实现想要的功能,因为要写的代码量并不多,所以直接使用在线编辑功能就好了, index.js 文件中的代码如下

// index.js
'use strict';
const axios = require('axios');

exports.main_handler = async (event, context) => {
    const res = await axios.get('https://api.bilibili.com/x/space/bangumi/follow/list?type=1&follow_status=0&pn=1&ps=15&vmid=33144699&ts=1624330006604')
    let resp = {};
    if (res.data.code === 0) {
        resp = {
            errCode: 0,
            msg: '请求成功',
            data: res.data.data
        } ;
    } else {
        resp = {
            errCode: 1,
            msg: 'error'
        };
    }
    resp = JSON.stringify(resp);
    return {
        "isBase64Encoded": false,
        "statusCode": 200,
        "headers": {"Content-Type":"application/json; charset=utf-8"},
        "body": resp
     };
};

依赖处理

需要注意的是,我们在代码的编写中引入了一个库,那么这个依赖要如何才能安装到我们的项目中呢,像我们在本地开发一样,在根目录下新建一个 package.json 文件,将我们要使用的依赖记录在里面,记得打开编辑器右上角的自动安装依赖的功能,这样在部署的时候可以为我们自动安装依赖

// package.json
{
  "name": "biblibili-sub-anime",
  "version": "0.0.1",
  "dependencies": {
    "axios": "^0.21.1"
  }
}

打开自动安装依赖

另一方面,你应该也注意到我的返回值有些奇怪,为啥还把对象转成字符串再返回,这就要引出我们下面提到的功能,触发器

触发器

到现在的话,这个函数已经是可以运行的了,你可以在部署后点击编辑器下方的 测试 按钮,这样会调用你的函数并返回结果。但是我们比较想要的是一个 http 接口,所以我们需要新建一个网关触发器,触发方式选择 API网关触发

新建网关触发器

这里默认勾选了一项集成响应,使用集成响应的话返回值必须按照它规定的格式来,如果格式不对,它就会提示你,这个就难受在它只是告诉你你错了,不会告诉你错哪了,API 网关触发器相关问题open in new window API 网关触发器概述open in new window ,如果不勾选的话是使用透传响应,那需要自己返回一个完整的 http 响应,所以我认为还是使用集成响应要简单一点,点击触发器中的访问链接,就可以在浏览器中看到调用结果

{
  "errno": 403,
  "error": "Invalid scf response. expected scf response valid JSON."
}
// 或
{
  "error": 403,
  "error": "Invalid scf response format. please check your scf response format."
}
MIT Licensed | Copyright © 2017-present 进击的学霸, 自豪的使用 七牛云,已加入十年之约