Подтвердить что ты не робот

Добавить преднамеренную задержку в экспресс

Im использует экспресс с node.js и тестирует определенные маршруты. Я делаю этот tute на http://coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express-and-mongodb/

Я вызываю http://localhost:3000/wines через ajax (содержимое не имеет значения). Но я хочу проверить задержку. Могу ли я сделать что-то вроде экспресс-ответа через 2 секунды? (Я хочу, чтобы имитировать загрузчик ajax, и я запускаю на localhost, поэтому моя латентность почти равна нулю)

4b9b3361

Ответ 1

Просто вызовите res.send внутри setTimeout:

setTimeout((function() {res.send(items)}), 2000);

Ответ 2

Использовать в качестве промежуточного программного обеспечения для всех ваших запросов

  app.use(function(req,res,next){setTimeout(next,1000)});

Ответ 3

Попробуйте connect-pause модуль. Это добавляет задержку для всех или только некоторых маршрутов в вашем приложении.

Ответ 4

Чтобы применить его глобально по всем запросам, вы можете использовать следующий код:

app.use( ( req, res, next ) => {
    setTimeout(next, Math.floor( ( Math.random() * 2000 ) + 100 ) );
});

Значения времени:

Макс = 2000 (сорт.... мин. добавляется так на самом деле его 2100)

Мин = 100

Ответ 5

Вы также можете просто написать свой собственный общий обработчик задержки, используя Promise или callback (используя q в этом случае):

pause.js:

var q = require('q');

function pause(time) {
    var deferred = q.defer();

    // if the supplied time value is not a number, 
    // set it to 0, 
    // else use supplied value
    time = isNaN(time) ? 0 : time;

    // Logging that this function has been called, 
    // just in case you forgot about a pause() you added somewhere, 
    // and you think your code is just running super-slow :)
    console.log('pause()-ing for ' + time + ' milliseconds');

    setTimeout(function () {
        deferred.resolve();
    }, time);

    return deferred.promise;
}

module.exports = pause;

затем используйте его, как бы вы хотели:

server.js:

var pause = require('./pause');

router.get('/items', function (req, res) {
    var items = [];

    pause(2000)
        .then(function () {
            res.send(items)
        });

});