firebaser這裏
的功能部署確實需要更多的時間比我通常願意等待。我們正在努力改進它(正如布倫丹所說)正在開發一個本地模擬器。
但目前,我主要是先將我的實際業務邏輯寫入單獨的Node腳本。這樣我可以用本地命令提示符node speech.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;
然後在我的功能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
部分)可能已經發生了一些變化。
有沒有更新? 謝謝。 –
可用的https功能的Alpha版本firebase模擬器:https://firebase.google。com/docs/functions/local-emulator –