我正在使用API进行文本翻译(您可以在此处找到它:Yandex)。
以下代码位于前端并且工作正常:
var url = "https://translate.yandex.net/api/v1.5/tr.json/translate",
keyAPI = "myKey/hidden";
var xhr = new XMLHttpRequest(),
textAPI = "fa asta sa fie in engleza";
langAPI = "en";
data = "key="+keyAPI+"&text="+textAPI+"&lang="+langAPI;
xhr.open("POST",url,true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send(data);
xhr.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
var res = this.responseText;
var json = JSON.parse(res);
if (json.code === 200) {
console.log( json.text[0]);
}
else {
console.log("Error Code: " + json.code);
}
}
};
浏览器中的控制台输出:
这样做是英文
所以没关系。
但是,我需要在后端执行此操作。所以,我知道 XMLHttpRequest 是内置浏览器,但不在节点中,因此我使用以下命令安装它:npm install xmlhttprequest我尝试使用与前端使用的代码相同的代码,但我在 xhr.onreadystatechange 上添加了一个日志,告诉我状态:
xhr.onreadystatechange = function() {
console.log(this.status);
if (this.readyState === 4 && this.status === 200) {
var res = this.responseText;
var json = JSON.parse(res);
if (json.code === 200) {
console.log( json.text[0]);
}
else {
console.log("Error Code: " + json.code);
}
}
};
我得到的是:
0
和
415
作为状态。
所以它没有用。我决定改用请求:
var url = "https://translate.yandex.net/api/v1.5/tr.json/translate";
var keyAPI = "hidden;
var xhr = new XMLHttpRequest();
var textAPI = "fa asta sa fie in engleza";
var langAPI = "en";
request.post({
url: url,
body: JSON.stringify({
key : keyAPI,
text: "tradu",
lang : langAPI
}),
json: true
}, function(err, response, body) {
if(err) {
console.log(err);
return;
}
console.log(body);
});
我得到的输出是:
{code:415,message:'不支持的媒体类型' }
再说一遍,它不起作用。我也尝试在帖子请求中添加标题,如下所示:
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
但它没有任何区别。
我做了一些挖掘,发现状态 415 意味着不支持的媒体类型,我也阅读了一些关于此的帖子/修复但没有人帮助过我。
答案 0 :(得分:3)
要使其正常工作,请使用form
键发送数据(使用请求)
var url = "https://translate.yandex.net/api/v1.5/tr.json/translate";
var keyAPI = "hidden";
var textAPI = "fa asta sa fie in engleza";
var langAPI = "en";
request.post({
url: url,
form: {
text: textAPI,
key: keyAPI,
lang: langAPI
},
}, function(err, response, body) {
if(err) {
console.log(err);
return;
}
console.log(body);
});