gpt4 book ai didi

node.js - 如何在 PC 上本地测试 Cloud Functions for Firebase

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:29 24 4
gpt4 key购买 nike

今天 Firebase 发布了全新产品 Cloud Functions for Firebase我刚刚创建了一个 hello world 函数并将其部署到我现有的 firebase 项目上。

看起来它捆绑了所有依赖项并将其上传到 firebase,就像 aws lambda 函数 一样。但即使是代码的微小更改也需要花费太多时间,并且还需要良好的互联网连接。如果您由于某种原因处于离线状态,那么您对正在编写的代码一无所知,直到您有办法在本地计算机上离线执行和测试该功能。

有没有办法在本地测试 Cloud Functions for Firebase?

最佳答案

此处为 firebaser

部署您的功能确实需要比我通常愿意等待的时间更多的时间。我们正在努力改进这一点,并且(正如 Brendan 所说)正在开发本地模拟器。

但目前,我主要是先将实际业务逻辑写入单独的 Node 脚本中。这样我就可以使用 node voice.js 从本地命令提示符对其进行测试。一旦我对函数的工作感到满意,我要么将其复制/粘贴到我的实际函数文件中,要么(更好)将 speech 模块导入到我的函数文件中并从那里调用它。

我很快发现的一个简短示例是当我使用 Cloud Vision API 连接文本提取时。我有一个名为 ocr.js 的文件,其中包含:

var fetch = require('node-fetch');

function extract_text(url, gcloud_authorization) {
console.log('extract_text from image '+url+' with authorization '+gcloud_authorization);

return fetch(url).then(function(res) {
return res.buffer();
}).then(function(buffer) {
return fetch('https://vision.googleapis.com/v1/images:annotate?key='+gcloud_authorization, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
"requests":[
{
"image":{
"content": buffer.toString('base64')
},
"features":[
{
"type":"TEXT_DETECTION",
"maxResults":1
}
]
}
]
})
});
}).then(function(res) {
var json = res.json();
if (res.status >= 200 && res.status < 300) {
return json;
} else {
return json.then(Promise.reject.bind(Promise));
}
}).then(function(json) {
if (json.responses && json.responses.length && json.responses[0].error) {
return Promise.reject(json.responses[0].error);
}
return json.responses[0].textAnnotations[0].description;
});
}

if (process.argv.length > 2) {
// by passing the image URL and gcloud access token, you can test this module
process.argv.forEach(a => console.log(a));
extract_text(
process.argv[2], // image URL
process.argv[3] // gcloud access token or API key
).then(function(description) {
console.log(description);
}).catch(function(error) {
console.error(error);
});
}

exports.extract_text = extract_text;

然后在我的 Functions index.js 中,我有:

var functions = require('firebase-functions');
var fetch = require('node-fetch');
var ocr = require('./ocr.js');

exports.ocr = functions.database().path('/messages/{room}/{id}').onWrite(function(event) {
console.log('OCR triggered for /messages/'+event.params.room+'/'+event.params.id);

if (!event.data || !event.data.exists()) return;
if (event.data.ocr) return;
if (event.data.val().text.indexOf("https://firebasestorage.googleapis.com/") !== 0) return; // only OCR images

console.log(JSON.stringify(functions.env));

return ocr.extract_text(event.data.val().text, functions.env.googlecloud.apikey).then(function(text) {
return event.data.adminRef.update({ ocr: text });
});
});

正如您所看到的,最后一个文件实际上只是将“工作方法”ocr.extract_text 连接到数据库位置。

请注意,这是一个不久前的项目,因此某些语法(主要是 functions.env 部分)可能已经发生了一些变化。

关于node.js - 如何在 PC 上本地测试 Cloud Functions for Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42895012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com