2011-09-12 2 views
0
searchJSON = { 
    location: 'NYC', 
    text: text, 
    authID: apiKey 
    }; 
    searchRequest = { 
    host: siteUrl, 
    port: 80, 
    path: '/search', 
    method: 'GET' 
    }; 
searchResponse = makeRequest(searchRequest, searchJSON); 
makeRequest = function(options, data) { 
    var req; 
    if (typeof data !== 'string') { 
    data = JSON.stringify(data); 
    } 
    req = http.get(options, function(res) { 
    var body; 
    body = ''; 
    res.on('data', function(chunk) { 
     body += chunk; 
    }); 
    return res.on('end', function() { 
     console.log(body); 
    }); 
    }); 
    console.log(data); 
    req.write(data); 
    req.end(); 
}; 

http://www.somesite.com/search?location=NYC&text=text&authID=[mykey]으로 변환하지 않아야합니까?ExpressJS가 요청 명령을 제대로 실행하지 않는 이유는 무엇입니까?

+0

를 작동 기본 요청 방법이다. –

답변

1

이 코드에는 실수로 비동기 코드 흐름의 작동 방식을 검토해야하는 경우가 많이 있습니다. makeRequest가 정의되기 전에 호출 중이며 http.get에서 응답 콜백의 값을 반환하려고 시도하고 있습니다. 작동하지 않습니다. 또한 'var'키워드가 누락되었습니다.

그 이상의 주요 문제는 요청 본문에 URL 인수를 전달한다는 것입니다. 작동하지 않습니다. 둘째, 요청이 이미 http.get에서 끝난 후에 req.write 및 req.end를 호출합니다. JSON.stringify는 완전히 URL 매개 변수를 생성하는 잘못된 방법입니다.

은 다음은 GET을하려고하지만, 메시지 본문을 writting 것처럼 보이는

var url = require('url'); 
var http = require('http'); 

function makeRequest(host, path, args, cb) { 

    var options = { 
    host: host, 
    port: 80, 
    path: url.format({ pathname: path, query: args}) 
    }; 

    http.get(options, function(res) { 
    var body = ''; 

    res.on('data', function(chunk) { 
     body += chunk; 
    }); 

    res.on('end', function() { 
     cb(body); 
    }); 
    }); 
}; 


var searchJSON = { 
    location: 'NYC', 
    text: "text", 
    authID: "apiKey" 
}; 

makeRequest('somesite.com', '/', searchJSON, function(data) { 
    console.log(data); 
}); 
관련 문제