Запрос данных сервера. JavaScript
По адресу https://api.coincap.io/v2/assets?limit=1 есть парметр "priceUsd" с числовым значением пытаюсь получить его в консоль на http://localhost:3000 весь код
const http = require('http');
const server = http.createServer();
server.on('request', (req, res) =>{
res.end('Hello')
});
server.listen(3000, (error) => console.log('Server Run'));
server.addEventListener("DOMContentLoaded", () => {
function req() {
const request = new XMLHttpRequest();
request.open("GET", "https://api.coincap.io/v2/assets?limit=1");
request.setRequestHeader("Content-type", "application/json; charaset=utf-8");
request.send();
request.addEventListener("load" , function() {
if (request.status == 200) {
let data = JSON.parse(request.response);
console.log(data);
} else {
console.error("Что-то не так");
}
});
}
})
req();
Ответы (1 шт):
У вас смешались браузерный и серверный код.
Вы запускаете код не в браузере. Сервер и браузер - это две разные среды, и код, который работает в одной среде, не обязательно заработает в другой.
По порядку:
В
node.jsмодулеhttp, у классаhttp.Server, инстанс которого вы создаете с помощью методаhttp.createServer(), нет методаaddEventListener(). Он из браузерногоDOM API.В
node.jsнет такого класса какXMLHttpRequest. Он есть в виде отдельно загружаемого npm модуля, и в браузерном API. Все реквесты делаются с помощью методаhttp.request()или других сторонних http-клиентов, напримерaxios.Ну и у вас функция
req()объявлена внутри обработчика слушателя. Объявлена и никогда не будет вызвана. Вы пытаетесь вызвать ее в последней строчке, но получитеreq is not defined.
В вашем случае код должен выглядеть примерно так:
const http = require('http');
const https = require('https');
const server = http.createServer((_req, res) => { // создаем инстанс класса http.Server
// при запросе к localhost:3000 выполнится этот колбэк
res.writeHead(200, { 'Content-Type': 'text/plain' });
// опции запроса к удаленному серверу
const options = {
host: 'api.coincap.io',
path: '/v2/assets?limit=1',
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
};
// http запрос вернет нам 301 Permanently Moved, поэтому https
https.request(options, (response) => {
let str = '';
// данные грузятся не одним куском, а чанками
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
const { priceUsd } = JSON.parse(str).data[0]; // получаем preiceUsd из ответа
res.end(priceUsd); // отправляем ответ тому, кто обратился к localhost:3000
});
}).end();
});
server.listen(3000, '127.0.0.1');
Добавил может быть кривоватые комменты в код, но старался, чтобы было понятно, что и для чего.
Вообще поподробнее изучите:
- Документацию по модулю
http - Всё что нужно знать про HTTP
И если хотите работать с бэкендом, лучше начните с фреймворка типа express.js, чтобы не изобретать велосипед.