我使用npm-request和npm-async調用兩個服務,並將它們的結果組合起來,並將它們顯示給用戶。 (服務1:你好;服務2:世界;服務3:你好世界)。我想通過標頭傳遞一個ID來跟蹤呼叫的路由。通過鏈接服務傳遞標題
helloString = 'Nothing';
worldString = 'Yet';
async.series([
function(callback){
// call helloService
request('http://localhost:3000/hello', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
callback(null, body);
}
else {
callback(err, null);
}
})
},
function(callback){
// call worldService
request('http://localhost:3001/world', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
callback(null, body);
}
else {
callback(err, null);
}
})
}
],
// optional callback
function(err, results){
// results is now equal to ['hello', 'world']
console.log('*************');
console.log(results[0] + ' ' + results[1]);
console.log('*************');
res.send(results[0] + ' ' + results[1]);
});
我想要做的是攔截這兩個電話,並添加自定義標題,簡直就像我寫了這個:
request({url: 'http://localhost:3000/hello', headers: {'id': '12345'}}, function (error, response, body) {...
但無需每次手動輸入。
到目前爲止,我已經試過把這裏面的每一項服務server.js文件:
app.use(function(req,res,next){
if (req.headers["id"]) {
console.log('service was given id: ' + req.headers["id"]);
res.writeHead(200, {"id": req.headers["id"]});
console.log('set res header id to ' + res._headers["id"]);
}
else {
console.log("I wasn't passed the ID");
}
next();
});
我似乎是正確抓住標識,但有它傳遞到下一個服務的麻煩。這是我得到的錯誤:
_http_outgoing.js:335
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
在此先感謝您!
哦,我明白了!謝謝。這照顧到了錯誤,但不幸的是,頭文件仍然沒有被輔助服務接收。這些是傳遞給helloService的頭文件(我通過req.headers獲得了這個頭文件):{host:'localhost:3000',connection:'close'} –
@SamuelHill - 這是一個演示你如何使用'request )':https://github.com/request/request#custom-http-headers – jfriend00
@ jfrend00謝謝!我明白了,但我需要做的是攔截該請求並添加標題,而不是爲每個調用手動添加標題。 –