javascript - Node js ajax 上缺少 Google 翻译键

标签 javascript node.js ajax google-translate

我有一个简单的 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 key ,以便通过 Ajax 调用时它可以工作?

谢谢

最佳答案

似乎由于某种原因,应用程序无法正确读取环境变量。由于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);
}

或者将 key 直接传递给构造函数

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

您还可以确保 key 文件在您端被读取,并将配置传递给翻译构造函数

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

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

关于javascript - Node js ajax 上缺少 Google 翻译键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57218568/

相关文章:

javascript - 变量未定义,即使它已定义?

javascript - 如何添加简单的图片上传功能?

javascript - div 循环隐藏和显示

javascript - 禁用日期选择器上的日期的问题

javascript - 如何在 Elasticsearch 中创建或替换文档?

java - 使用 AJAX、JAVA WS-RS @Post 发送 Xml

javascript - 如何让 visual studio 代码不把我的双引号变成单引号?

javascript - 无法在 Node.js 应用程序中提供样式表

node.js - 无法获取 Apple Pay 支付 session

javascript - Ajax 代码将用户数据发送到更新表的已编辑行的 php 页面