部署firebase云功能时出错

时间:2018-03-28 07:31:44

标签: node.js firebase google-cloud-functions google-speech-api

我正在尝试部署我的功能但显示错误。我正在尝试使用云语音api&云翻译api与firebase云功能。

const functions = require('firebase-functions');

const Speech = require('@google-cloud/speech');
const Translate = require('@google-cloud/translate');

const speech = Speech({keyFilename: "credentials.json"});
const translate = Translate({keyFilename: "credentials.json"});
const Encoding = Speech.v1.types.RecognitionConfig.AudioEncoding;

function getLanguageWithoutLocale(languageCode) {
    if (languageCode.indexOf("-") >= 0) {
        return languageCode.substring(0, languageCode.indexOf("-"));
    }
    return languageCode;
}

exports.onUpload = functions.database
    .ref("/uploads/{uploadId}")
    .onWrite((event) => {
        let data = event.data.val();
        let language = data.language ? data.language : "en";
        let sampleRate = data.sampleRate ? data.sampleRate : 16000;
        let encoding = data.encoding === "FLAC" ? Encoding.FLAC : Encoding.AMR;

        let request = {
            config: {
                languageCode : language,
                sampleRateHertz : sampleRate,
                encoding : encoding
            },
            audio: { uri : `gs://mimming-babelfire.appspot.com/${data.fullPath}` }
        };

        return speech.recognize(request).then((response) => {
            let transcript = response[0].results[0].alternatives[0].transcript;
            return event.data.adminRef.root
                .child("transcripts").child(event.params.uploadId)
                .set({text: transcript, language: language});
        });
    });

exports.onTranscript = functions.database
    .ref("/transcripts/{transcriptId}")
    .onWrite((event) => {
        let value = event.data.val();
        let transcriptId = event.params.transcriptId;
        let text = value.text ? value.text : value;
        let languages = ["en", "es", "pt", "de", "ja", "hi", "nl", "fr", "pl"];
        // All supported languages: https://cloud.google.com/translate/docs/languages

        let from = value.language ? getLanguageWithoutLocale(value.language) : "en";
        let promises = languages.map(to => {
            console.log(`translating from '${from}' to '${to}', text '${text}'`);
            // Call the Google Cloud Platform Translate API

            if (from === to) {
                return event.data.adminRef.root
                    .child("translations").child(transcriptId).child(to)
                    .set({text: text, language: from});
            } else {
                return translate.translate(text, {
                    from: from,
                    to: to
                }).then(result => {
                    // Write the translation to the database
                    let translation = result[0];
                    return event.data.adminRef.root
                        .child("translations").child(transcriptId).child(to)
                        .set({text: translation, language: to});
                });
            }
        });
        return Promise.all(promises);
    });

我在npm安装了@ google-cloud / speech和@ google-cloud / translate。

显示错误

Error: Error occurred while parsing your function triggers.

TypeError: Speech is not a function
    at Object.<anonymous> (C:\Users\Akash\AndroidStudioProjects\Translator\functions\index.js:6:16)
    at Module._compile (module.js:649:30)
    at Object.Module._extensions..js (module.js:660:10)
    at Module.load (module.js:561:32)
    at tryModuleLoad (module.js:501:12)
    at Function.Module._load (module.js:493:3)
    at Module.require (module.js:593:17)
    at require (internal/module.js:11:18)
    at C:\Users\Akash\AppData\Roaming\npm\node_modules\firebase-tools\lib\triggerParser.js:18:11
    at Object.<anonymous> (C:\Users\Akash\AppData\Roaming\npm\node_modules\firebase-tools\lib\triggerParser.js:38:3)
如果有人知道的话,请帮我找错。提前谢谢

1 个答案:

答案 0 :(得分:1)

它抱怨这条线:

const speech = Speech({keyFilename: "credentials.json"});

您正在使用Speech,就像它是一个功能一样,但它不是一个功能。

查看documentation,您似乎应该像这样初始化它:

const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();