Я'м пытаюсь получить мою функцию для возврата протокола HTTP, однако вам просить, что бы я ни делал, кажется, заблудиться в ?объем?. Я'м ухожу нового Node.js так что любая помощь будет оценили
function getData(){
var http = require('http');
var str = '';
var options = {
host: 'www.random.org',
path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
};
callback = function(response) {
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
});
//return str;
}
var req = http.request(options, callback).end();
// These just return undefined and empty
console.log(req.data);
console.log(str);
}
Конечно, ваши журналы возвращать undefined : вы входите прежде, чем запрос будет сделано. Проблема это'сфера т а asynchronicity.
с HTTP.запрос является асинхронным, что's, почему он принимает обратного вызова в качестве параметра. Делать то, что вам нужно сделать вызов (тот, который вы проходите в ответ.конец`):
callback = function(response) {
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(req.data);
console.log(str);
// your code here if you want to use the results !
});
}
var req = http.request(options, callback).end();
Короче пример с использованием HTTP.получаем:
require('http').get('http://httpbin.org/ip', (res) => {
res.setEncoding('utf8');
res.on('data', function (body) {
console.log(body);
});
});
из learnyounode:
var http = require('http')
http.get(options, function (response) {
response.setEncoding('utf8')
response.on('data', console.log)
response.on('error', console.error)
})
'параметры' хозяин/переменную PATH
из learnyounode:
var http = require('http')
var bl = require('bl')
http.get(process.argv[2], function (response) {
response.pipe(bl(function (err, data) {
if (err)
return console.error(err)
data = data.toString()
console.log(data)
}))
})
Это мое решение, хотя уверен, что вы можете использовать много модулей, которые дают вам объект как обещание или похожие. В любом случае, у тебя не было другого обратного вызова
function getData(callbackData){
var http = require('http');
var str = '';
var options = {
host: 'www.random.org',
path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
};
callback = function(response) {
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
callbackData(str);
});
//return str;
}
var req = http.request(options, callback).end();
// These just return undefined and empty
console.log(req.data);
console.log(str);
}
где-то еще
getData(function(data){
// YOUR CODE HERE!!!
})
Я думаю, что это's слишком поздно, чтобы ответить на этот вопрос, но я столкнулся с той же проблемой недавно моем случае использовать было называть разбиением на страницы формата JSON API и получить все данные из каждого разбиения на страницы и добавляет их в единый массив.
``в JavaScript константный протоколу HTTPS = требуют('протокол HTTPS'); константный apiUrl = "и https://example.com/api/movies/search/?Title="; пусть в finaldata = []; пусть функция someCallBack = (данных){ в finaldata.толчок(...данных); консоль.журнала(в finaldata); }; константность метода GetData = функция (функцию substr, pageNo=1, someCallBack) {
пусть actualUrl = apiUrl + ${подстрока}&страницы=${pageNo}
;
пусть для mydata = []
протоколу HTTPS.вам(actualUrl, (ОТВ) => {
давайте данные = '';
респ.О('и#39;, (кусок) => {
данные += краюшка;
});
респ.О('Конец', асинхронный () => {
если (в JSON.анализа(данных).total_pages!==значение null){
pageNo+=1;
somCallBack(в JSON.анализа(данных).данных);
ожидайте метода GetData(функцию substr, pageNo, someCallBack);
}
});
}).о("по ошибке", (подстраховаться) => {
консоль.журнал (на"ошибка: " в + подстраховаться.сообщение);
});
}
метода GetData (и"паук" и, pageNo=1, someCallBack);
` Как @ackuser упомянул, мы можем использовать другой модуль, но в моем случае использовать я использовать узел с
https`. Надеясь, что это поможет другим.
Простой рабочий пример HTTP-запроса, используя узел.
`` константный НТТР = требуют('протокол HTTPS')
класса HttpRequest().тогда((данные) => { ответ константный = { состояния: 200, тело: в JSON.преобразовать в строки(сведения), }; возврат ответ; }); функция класса HttpRequest() { вернуть новое обещание((разрешить, отказать) => { константные параметры = { ведущий: 'jsonplaceholder.typicode.ком', путь: '/Тодос', порт: 443, метод: 'вам' }; константный Треб = НТТР.запрос(параметры, (РЭС) => { если (рез.состояния < 200 || РЭС.состояния >= 300) { возврат отклонить(новая ошибка('состояния=' + Рес.состояния)); } ВАР тела = []; РЭС.О('и#39;, функции(блока) { тела.толчок(кусок); }); РЭС.О('Конец', функция() { попробовать { тело = формат JSON.разобрать(буфер.функция concat(тело).метод toString()); } поймать(е) { отклонить(е); } решения(тело); }); }); Треб.на('ошибка', (е) => { отклонить(электронная.сообщение); }); // отправить запрос Треб.конец(); }); } ``