匹配的網址異步請求的針的NodeJS處理陣列目標:用的StatusCode
鑑於URL的數組,我需要發送一個請求,並取回的StatusCode爲每一個。最後,我需要將statusCode與一個對象數組中的請求URL進行匹配,然後將其返回到頁面。
像這樣:
checkList: [
{
name: "Google",
url: "https://www.google.com"
},
{
name: "Microsoft",
url: "https://www.microsoft.com"
},
{
name: "Github",
url: "https://www.github.com"
}
]
對於列表中的每個URL,我需要簡單地使一個HTTP請求並返回一個狀態代碼(例如:200),並匹配以請求路徑。所以最終的輸出應該是這樣的......
results: [
{
name: "Google",
url: "https://www.google.com",
status: 200
},
{
name: "Microsoft",
url: "https://www.microsoft.com",
status: 200
},
{
name: "Github",
url: "https://www.github.com",
status: 200
}
]
我目前使用BluebirdJS和Needle處理異步調用獲得響應代碼。
問題是我看不到一種方法來匹配請求URL和響應。由於每個結果都會在不同的時間返回(如預期的那樣),並且Needle響應中不包含請求URL,所以我不能說類似......「https://google.com響應爲200」。我只能得到一個響應代碼列表。
我對高級JS比較新,所以也許有一種方法可以覆蓋回調/承諾,它允許我通過整個過程傳遞請求URL,但我不知道如何。
這是我目前使用的基於演示/段我發現其他地方的代碼的要點... https://gist.github.com/sgelliott/13840b6f2f9d2ab481fcded6dc4a9188
代碼還包括如下內聯...
var needle = require('needle');
var Promise = require("bluebird");
Promise.promisifyAll(needle);
var allPaths = ["https://google.com", "https://microsoft.com", "https://github.com"];
var current = Promise.resolve();
Promise.map(allPaths, function(path) {
current = current.then(function() {
console.log("path: " + path); // path shows up here correctly - it's available
return needle.getAsync(path, options);
});
return current;
}).map(function(resp, body) {
return {
path: "path goes here",
status: resp.statusCode
};
}).then(function(results) {
console.log("results: " + JSON.stringify(results)); // this outputs 'resulst' : [{"path":"path goes here","status":200},{"path":"path goes here","status":302},{"path":"path goes here","status":200}]
return renderResults(results); //this simply sets 'statusResults' to 'results' for the next res.send to use - will refine once I solve the path matching issue
}).then(function() {
console.log('All Needle requests are processed!');
res.send(statusResults); //
}).catch(function(e) {
console.log(e);
});
如果這是其他事情的重複,我表示歉意。經過大量研究後,我無法找到它。如果解決方案是使用Needle以外的東西,那很好。我寧願堅持使用藍鳥。先謝謝你!
爲什麼不把代碼放在問題本身,而不是外部鏈接將過時,然後這個問題是沒有用的未來的讀者? –
在第20行...你在哪裏說'我無法訪問原始請求URL /路徑以匹配'...結果[n]不會是'allPaths [n]的結果' –
@JaromandaX我從未打算摧毀Gist,但我已經調整了帖子以將其包含在內。至於你的問題......這是一個很好的問題。我假設,由於異步調用可能會在給定網絡流量的不同時間返回值,因此不能保證結果數組的順序與原始請求URL集的順序相同。你知道這樣的事情是否有保證嗎?看起來有更合適的方法來做到這一點。 – sgelliott