2016-04-09 9 views
0

NodeJSでサードパーティのAPIサーバを呼び出す必要があります。以下に示すように、私はreqrespの中にrequest()メソッドを使用する必要があります。NodeJSでサードパーティのhttpリクエストをインターセプトする方法はありますか?

使用する必要があるAPIがたくさんあるので、request()を使用するたびにset headersset response cookiesになりたくありません。

request()を傍受できることはありますか?

router.post('/register', function (req, resp) { 
    var api = "/user/register" 
    var data = req.body) 
    request({ 
     url: api, 
     method: "POST", 
     json: true, 
     headers: {'session_id' : req.cookies.session_id}, 
     body: { 
      "tel": data.tel, "code": data.code, 
      "password": data.passwd, "referee": data.recommend 
     } 
    }, function (error, response, body) { 
     resp.cookies('session_id', response.headers['sessionId']) 
     resp.json(body) 
    }) 
}) 
+0

'request'パッケージは、特急、彼' request'と 'response''について何も知らないしませんを行うことができますあなたは傍受することはできません。しかし、 'req'から必要な情報を抽出し、' res'を更新する2つの単純な関数を作成することができます。 'request'の呼び出しごとにこれらの関数を呼び出してください。 – alexmac

答えて

0

非常にエレガントではない)などが存在するが、あなたは常に要求

などを中心に、独自のラッパーを作成することができます

myrequest.js

var request = require('request'); 

exports.postJsonWithCookie = function(url, payload, req, resp) { 
    request({ 
    url: url, 
    method: "POST", 
    json: true, 
    headers: {'session_id' : req.cookies.session_id}, 
    body: payload 
    }, function (error, response, body) { 
    resp.cookies('session_id', response.headers['sessionId']) 
    resp.json(body) 
    }); 
} 

は、あなたのルート定義にあなたは

var request = require('./myrequest'); 

router.post('/register', function (req, resp) { 
    var payload = { 
    "tel": req.body.tel, 
    "code": req.body.code, 
    "password": req.body.passwd, 
    "referee": req.body.recommend 
    } 
    request.postJsonWithCookie("/user/register", payload, req, resp); 
}); 
0

私が正しく理解していれば、いつでも同じオプションをrequestに渡すことは避けたいですか?あなたは単にあなたのためにそれを呼び出すヘルパー関数を作成することができます

:もちろん

function apiRequest(url, req, cb) { 
    request({ 
    url: url, 
    method: "POST", 
    json: true, 
    headers: {'session_id' : req.cookies.session_id}, 
    body: { 
     "tel": req.body.tel, "code": req.body.code, 
     "password": req.body.passwd, "referee": req.body.recommend 
    } 
    }, cb) 
} 

// Your previous code becomes 
router.post('/register', function (req, resp) { 
    apiRequest("/user/register", req, function (err, response, body) { 
    resp.cookies('session_id', response.headers['sessionId']) 
    resp.json(body) 
    }) 
}); 

を使用すると、これにエラー処理を追加した場合、それがあること、例えばreqが未定義でないことを確認する(良いだろうreq.body.X

関連する問題