Я делаю ajax-запрос со стороны клиента на сторону сервера.Затем с сервера я делаю еще один запрос ajax к api по питанию, чтобы получить информацию об определенных продуктах.Я делаю это таким образом, чтобы мой ключ API не находился в общедоступном коде JavaScript на стороне клиента.Похоже, что запрос от клиента отправляется, а затем получает мой сервер.Затем сервер делает запрос к API и получает правильный ответ.Однако ответ теряется между сервером и клиентом.
Я пытался печатать на консоль в различных местах тестирования.Я попытался использовать res.write (объект) и res.end (объект)
, вот мой сервер node.js:
http.createServer(function(req, res) {
var q = url.parse(req.url, true).query;
console.log("q.newIngredient: " + q.newIngredient);
var apireq = new XMLHttpRequest();
apireq.open('GET', 'https://api.nutritionix.com/v1_1/search/' + q.newIngredient + '?results=0:1&fields=item_name,nf_serving_size_qty,nf_serving_size_unit,nf_calories,nf_total_fat,nf_colesterol,nf_sodium,nf_total_carbohydrate,nf_sugars,nf_protein&appId=' + apiid + '&appKey=' + apikey, true);
apireq.addEventListener("load", function() {
if(apireq.status >= 200 && apireq.status <= 400) {
console.log("respond test");
res.writeHead(200, {"Content-Type": "application/json"});
console.log("type: " + typeof(apireq.responseText));
console.log(JSON.parse(apireq.responseText));
res.end(apireq.responseText);
console.log("respond test 2");
}
else {
console.log("Error in network request: " + req.statusText);
}
});
apireq.send(null);
//event.preventDefault();
}).listen(3001);
, а вот мой ajax-запрос на стороне клиента
req.open("GET", "http://localhost:3001/?newIngredient=" + newIngredient, true);
req.addEventListener('load', function() {
if(req.status >= 200 && req.status < 400) {
console.log("respond test 3");
var response = JSON.parse(req.responseText);
console.log(response);
console.log(response.hits[0].fields.item_name);
var nfacts = response.hits[0].fields;
console.log(nfacts);
}
else {
console.log("Error in network request: " + req.statusText);
}
});
req.send(null);
event.preventDefault();
});
}
сообщение «test test 3» не выводится на консоль.Однако печатаются другие тестовые сообщения с ответами, и печатается правильный ответ от API.
Спасибо!
Редактировать: Я обнаружил, что это проблема CORS.В консоли инструментов разработчика браузера появляется сообщение об ошибке:
Доступ к XMLHttpRequest по адресу http://localhost:3001/?newIngredient=ham' от источника http://localhost:3000' заблокирован политикой CORS: Нет доступаЗаголовок -Control-Allow-Origin 'присутствует на запрашиваемом ресурсе.
Я добавил эту строку кода, и она заработала: res.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");