当将Cloud Functions中的Node.js 6迁移到Node.js 8时,在使用后台函数时需要修改参数

背景 – 背景信息

之前已经有了宣布,Cloud Functions的node.js6已经被弃用,从2019年4月1日开始,需要迁移至node.js8或者node.js10。

因为之前创建的基于Node.js 6的Cloud Functions在2019年4月1日之前停止运行,所以我将其迁移到了Node.js 8,并在这个过程中修复了使用Storage/PubSub作为触发器的函数。修复这些函数花费了我意外的多时间,因此我在这里记录下来。

在使用Storage作为触发器的Function在未动作时发生了错误,错误信息为「ReferenceError: context is not defined」;而在使用PubSub作为触发器的Function时发生了错误,错误信息为「TypeError: First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.」。

应对

总结来说,上述页面中所提到的就是一切内容。
将 Cloud Functions 迁移到新的 Node.js 上。

由于后台函数的签名已更改,如果在触发器上指定了 Storage 或 PubSub,则需要调整参数。原先的参数是 “(event, callback)”,现在需要修改为 “(data, context, callback)”。

当触发器是存储时的示例

exports.sample = (event, callback) => {
  const file = event.data;
  const stringName = file.name;
  callback();
}
exports.sample = (data, context, callback) => {
  const stringName = data.name;
  callback();
}

当PubSub是触发器时的示例。

exports.sample = (event, callback) => {
  const pubsubMessage = event.data;
  const Buffer = require('safe-buffer').Buffer;
  const textPayload = JSON.parse(Buffer.from(pubsubMessage.data, 'base64').toString());
  callback();
}
exports.executeQuery = (data, context, callback) => {
  const pubsubMessage = data;
  const Buffer = require('safe-buffer').Buffer;
  const textPayload = JSON.parse(Buffer.from(pubsubMessage.data, 'base64').toString());
  callback();
}