我有一个简单的 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/