2012-04-20 6 views
1

ここには何かがあります: 私はサーバーにデータを送信するクライアントを持っています。このサーバは外部のA.P.Iに連絡する必要があります。その応答をクライアントに返送する。サーバーがクライアントデータを取得したら、外部のA.P.Iに連絡する方法と場所を把握できません。このようなExpressJS - 外部APIに連絡する

Iルートクライアントデータ:

app.post('/getAutoComplete', routes.read); 

routes.readがreq.body内のデータを取得します。

var http = require('http'), options = { 
     host : "192.168.1.38", 
     port : 8080, 
     path : "/myURL", 
     method : 'POST' 
}; 

var webservice_data = ""; 

var webservice_request = http.request(options, function(webservice_response) 
{ 
    webservice_response.on('error', function(e){ console.log(e.message); }); 
    webservice_response.on('data', function(chunk){ webservice_data += chunk;}); 
    webservice_response.on('end', function(){res.send(webservice_data);}); 
}); 

webservice_request.write(req.body); 
webservice_request.end(); 

問題は、私はapp.postのようなネイティブexpressJSメソッドを使用したいのですが、どのようので、私は知らないということです。(速達フレームワークなし)私のnodejsバージョンでは、私は、APIをこのように要求します:

  1. エクスプレス(アプリ)オブジェクト私はapp.post
でPOSTデータを送信する方法がわからない
  • (app.jsではなく、ルートファイルで宣言された)、ここでは利用できません

    提案があります?

  • +0

    これは、Expressの仕組みではありません。 '' app.post'のような "expressJSのネイティブメソッドは、_receiving_ HTTP要求のためのものであり、それらを送信するものではありません。 –

    +0

    どうすれば外部のA.P.I.に連絡する必要がありますか? expressJSを使用していますか?私は現在それをやっているのと同じ方法ですか? – Simon

    答えて

    0

    routes.readは関数です。あなたは余分なパラメータでそれを呼び出すことができますので、例えば

    app.post('/getAutoComplete', function(req,res) { 
        var q = req.query.q; // or whatever data you need 
        routes.read(q, function(err, response) { 
         if (err) throw err; 
         return res.json(response); 
        }); 
    }); 
    

    は今routes.read関数はクエリとして最初のパラメータを使用して作成し、それがリモートAPIからの応答を集めていますとき、など任意のエラーで二番目のパラメータを呼び出します第1パラメータと応答を第2パラメータとする。

    更新すぎて、この答えは、すでに答えとして選ばれましたが、私はroutes.readの一例を示した場合には、より便利になるだろう:

    routes.read = function(q, cb) { 
        // pretend we calculate the result 
        var result = q * 10; 
        if (result > 100) { 
         // call the callback with error set 
         return cb("q value too high"); 
        } 
        // all is well, use setTimeout to demonstrate 
        // an asynchronous return 
        setTimeout(function() { cb(null, result) }, 2000); 
    }; 
    
    2
    app.post('/getAutoComplete', routes.read); 
    // assuming routes.read lookes something like this 
    routes.read = function read(req, res) { 
        var http = require('http'), options = { 
          host : "192.168.1.38", 
          port : 8080, 
          path : "/myURL", 
          method : 'POST' 
        }; 
    
        var webservice_data = ""; 
    
        var webservice_request = http.request(options, function(webservice_response) 
        { 
         webservice_response.on('error', function(e){ console.log(e.message); }); 
         webservice_response.on('data', function(chunk){ webservice_data += chunk;}); 
         webservice_response.on('end', function(){res.send(webservice_data);}); 
        }); 
    
        webservice_request.write(req.body); 
        webservice_request.end(); 
    }; 
    

    またhttps://github.com/mikeal/requestをチェックしてくださいこれは、ノードでWebリクエストを実行するための事実上のモジュールです。

    関連する問題