首页 > 解决方案 > 节点js ajax上缺少谷歌翻译键

问题描述

我有一个简单的 Node JS 脚本,在终端本地运行时可以正常工作:

exports.google_translate    = function (translate_text, res) {
var Translate       = require('@google-cloud/translate');
var translate       = new Translate.Translate({projectId: 'my project'});

translate.translate(translate_text, 'fr').then(results => {
    var translation     = results[0];
    res.send(translation);
}).catch(err => {
    res.send('ERROR:', err);
});
}

但是,每当我通过 Ajax 调用它时,都会收到以下错误:

Error: The request is missing a valid API key.

我已经使用它添加了这个作为永久环境变量:

export GOOGLE_APPLICATION_CREDENTIALS="[PATH to key downloaded]"

但是每次我通过 Ajax 调用这个脚本时,我都会得到同样的错误。所以我的问题是,如何让 Node JS 脚本保存 API 密钥,以便在通过 Ajax 调用时工作?

谢谢

标签: javascriptnode.jsajaxgoogle-translate

解决方案


似乎无论出于何种原因,应用程序都无法正确读取环境变量。由于 nodejs 将所有环境变量存储在中,因此process.env您可以通过调用来确保它是编写的:

function google_translate(translate_text) {
    process.env.GOOGLE_APPLICATION_CREDENTIALS = "[PATH to key downloaded]";

    return translate.translate(translate_text, 'fr')
        .then(console.log)
        .catch(console.error);
}

或将密钥直接传递给构造函数

const translate = new Translate.Translate({
    projectId: 'my-project',
    keyFilename: "[PATH to key downloaded]"
});

您还可以确保最终读取密钥文件并将配置传递给翻译构造函数

const translate = new Translate.Translate({
    credentials: JSON.parse(fs.readFileSync("[PATH to key downloaded]", "utf8"))
});

如果仍然没有帮助,可能是密钥本身的问题,您可以尝试在此处生成一个新密钥https://console.cloud.google.com/apis/credentials


推荐阅读