http get 요청을 반환하는 내 함수를 얻으려고 노력하고 있지만 무엇을하든? 범위에서 잃어버린 것처럼 보입니다. 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
: 요청이 완료되기 전에 로그합니다. 문제는 범위가 아니라 비동기 성 입니다.
http.request
비동기식이므로 콜백을 매개 변수로 사용합니다. 콜백 (전달하는 콜백)에서 수행해야 할 작업을 수행하십시오 response.end
.
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.get을 사용한 짧은 예 :
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)
})
‘options’는 호스트 / 경로 변수입니다.
답변
노드를 이용한 Http 요청의 간단한 작업 예.
const http = require('https')
httprequest().then((data) => {
const response = {
statusCode: 200,
body: JSON.stringify(data),
};
return response;
});
function httprequest() {
return new Promise((resolve, reject) => {
const options = {
host: 'jsonplaceholder.typicode.com',
path: '/todos',
port: 443,
method: 'GET'
};
const req = http.request(options, (res) => {
if (res.statusCode < 200 || res.statusCode >= 300) {
return reject(new Error('statusCode=' + res.statusCode));
}
var body = [];
res.on('data', function(chunk) {
body.push(chunk);
});
res.on('end', function() {
try {
body = JSON.parse(Buffer.concat(body).toString());
} catch(e) {
reject(e);
}
resolve(body);
});
});
req.on('error', (e) => {
reject(e.message);
});
// send the request
req.end();
});
}
답변
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!!!
})
답변
이 질문에 답하기에는 너무 늦었다 고 생각하지만 최근에 동일한 문제에 직면했습니다. 내 사용 사례는 페이지 매김 JSON API를 호출하고 각 페이지 매김에서 모든 데이터를 가져와 단일 배열에 추가하는 것이 었습니다.
const https = require('https');
const apiUrl = "https://example.com/api/movies/search/?Title=";
let finaldata = [];
let someCallBack = function(data){
finaldata.push(...data);
console.log(finaldata);
};
const getData = function (substr, pageNo=1, someCallBack) {
let actualUrl = apiUrl + `${substr}&page=${pageNo}`;
let mydata = []
https.get(actualUrl, (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', async () => {
if (JSON.parse(data).total_pages!==null){
pageNo+=1;
somCallBack(JSON.parse(data).data);
await getData(substr, pageNo, someCallBack);
}
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
}
getData("spiderman", pageNo=1, someCallBack);
@ackuser가 언급했듯이 다른 모듈을 사용할 수 있지만 사용 사례에서는 노드를 사용해야했습니다 https
. 이것이 다른 사람들에게 도움이되기를 바랍니다.