当将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();
}