2011-09-12 4 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をやろうとしますが、メッセージ本文に足すているように見えます

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); 
}); 
関連する問題