すべてのリクエストを記録してから再生するスクリプトを作成することで、問題を発見しました。
返されていないコールバックがあったため、問題が発生しました。
myAsncFunc(function(err, data) {
if (err) { callback(err) }
//node kept going after the error was returned to the user.
// make sure you, return callback(err)
})
これは、興味のある人のための私の replay.js コードです。
var request = require('request');
var async = require('async');
var redis = require('redis');
var host = 'http://myhost.com';
var jobs = true;
var client = redis.createClient();
async.whilst(
function () { return jobs; },
function (callback) {
client.lpop('history', function(err, url) {
console.log(url);
if (!url) {
jobs = false;
callback();
}
request.get({url:host+url}, function() {
callback();
});
})
},
function (err) {
console.log('done')
}
);
そして、あなたはエクスプレスアプリです。
app.get('/*', function(req, res, next) {
var url = req.originalUrl;
redis.rpush('history', url);
next();
});
再生されたすべての履歴アイテムがキューに再度追加されるため、継続的にループし、新しいページにアクセスするたびにそのページがキューに追加されるため、クールです.