在express中添加故意延迟

时间:2013-02-06 20:30:40

标签: node.js express

我使用express与node.js,并测试某些路由。我在http://coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express-and-mongodb/

做这个tute

我通过ajax调用http://localhost:3000/wines(内容无关紧要)。但我想测试延迟。我可以在2秒后做一些像快速回应的事吗? (我想模拟ajax加载器,我在localhost上运行所以我的延迟几乎为零)

8 个答案:

答案 0 :(得分:65)

用作所有请求的中间件

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

答案 1 :(得分:39)

只需拨打setTimeout内的res.send

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

答案 2 :(得分:4)

尝试使用connect-pause模块。它会为您应用中的所有路径或仅部分路线添加延迟。

答案 3 :(得分:3)

要在所有请求上应用全局,您可以使用以下代码:

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

时间值为:

最大值= 2000(加上......最小值,实际上是2100)

最小= 100

答案 4 :(得分:2)

app.get('/fakeDelay', function(req,res){
    let ms = req.query.t;
    ms = (ms>5000 || isNaN(ms)) ? 1000 : parseInt(ms); 
    setTimeout((()=> res.status(200).send({delay:ms})), ms);
})

然后请求网址为:http://localhost/fakeDelay/?t=2000

(此示例中最长5000毫秒,默认值为1000毫秒)

答案 5 :(得分:1)

您也可以使用Promise或回调编写自己的通用延迟处理程序(在这种情况下使用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)
        });

});

答案 6 :(得分:0)

只需在@maggocnx解决方案的顶部添加注释:将此中间件放到前面(在路由处理程序之前)

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

答案 7 :(得分:0)

您可以使用 express-delay 包。

下面的代码会将所有传入请求延迟一秒。

const app = require('express')();
const delay = require('express-delay');
app.use(delay(1000));

该软件包还提供了在指定边界内引入随机延迟的可能性,例如通过调用 delay(1000, 2000) 延迟一到两秒。