我使用google translate api已经有一段时间了,没有任何问题。
我最近将我的应用程序推送到了我的新服务器上,即使它在我的本地服务器上运行得很好,相同的源代码总是给我一个“必需的参数:q”作为错误消息。
我使用nodejs+expressjs+request发送这个请求。这是我的测试用例:
var request = require('request');
request.post({
url: "https://www.googleapis.com/language/translate/v2",
headers: {"X-HTTP-Method-Override": "GET"},
form: {
key: /* My Google API server key */,
target: "en",
q: ["Mon premier essai", "Mon second essai"]
}
}, function(error, response, data) {
if (!error && response.statusCode == 200) {
console.log("everything works fine");
} else {
console.log("something went wrong")
}
});
在本地机器上运行会让我“一切正常”,在服务器上运行会让我“出问题”。深入研究,我得到了上面提到的错误信息。
如你所见,我正试图用一个请求两个句子来翻译。这只是一个测试用例,但我真的需要通过post请求来使用它,而不是执行两个get请求。
我不知道这是怎么回事,我再次检查了我的谷歌设置,我在那里找不到问题。
另外,我在服务器上使用google places api和这个api密钥没有问题。
我卡住了。有人知道这里出了什么事吗?
最佳答案
好吧,我终于发现了问题所在:新版本的requestjs不能像旧版本那样工作,当我的本地计算机运行2.14时,我的服务器正在运行2.16。
不同的是数组的发送方式。我进行了调试,旧版本正在发送
key=my_api_key&target=en&q=mon%20premier%20essai&q=mon%20second%20essai
当新版本发送时
key=My_API_key&target=en&q[0]=周一%20Premier%20Essai&q[1]=周一%20Second%20Essai
所以我现在只在package.json文件中添加了2.14.x而不是2.x,希望它能很快得到修复——或者说它不是一个bug?我不知道。