Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在express中添加有意延迟_Node.js_Express - Fatal编程技术网

Node.js 在express中添加有意延迟

Node.js 在express中添加有意延迟,node.js,express,Node.js,Express,我在node.js中使用express,并测试某些路由。我现在正在做这个芭蕾舞 我正在呼叫http://localhost:3000/wines通过ajax(内容无关紧要)。但我想测试延迟。我可以在2秒钟后做一些类似于让express响应的事情吗?(我想模拟ajax加载程序,我在本地主机上运行,所以我的延迟几乎为零)只需在一个: 尝试模块。它会增加应用程序中所有或仅部分路由的延迟。将其用作中间件,用于所有请求 app.use(function(req,res,next){setTimeout

我在node.js中使用express,并测试某些路由。我现在正在做这个芭蕾舞


我正在呼叫
http://localhost:3000/wines
通过ajax(内容无关紧要)。但我想测试延迟。我可以在2秒钟后做一些类似于让express响应的事情吗?(我想模拟ajax加载程序,我在本地主机上运行,所以我的延迟几乎为零)

只需在一个:


尝试模块。它会增加应用程序中所有或仅部分路由的延迟。

将其用作中间件,用于所有请求

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

您也可以使用承诺或回调(在本例中使用承诺)编写自己的通用延迟处理程序:

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;
var pause = require('./pause');

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

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

});
然后按照您的意愿使用它:

server.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;
var pause = require('./pause');

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

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

});

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

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

时间值为:

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;
var pause = require('./pause');

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

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

});
Max=2000(有点……最小值被加上,所以实际上是2100)

最小值=100

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);
})
然后请求URL作为:


(本例中的最大值为5000ms,默认值为1000ms)

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

app.use(函数(req,res,next){setTimeout(next,1000)})

您可以使用该软件包

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

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

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

简单的模块有效地实现了@maggocnx解决方案的建议。称我为老派,但添加对一行代码的依赖似乎有些过分:使用它,thx,如es6:
app.use((req,res,next)=>settimeout(next,1000))
@yau dimon,settimeout拼写错误,应该是settimeout顺序对我很重要。在设置
静态
文件中间件之前设置延迟中间件(在我的例子中,我想延迟此类静态资产),它非常简单。我不明白为什么我以前没有想到这一点。谢谢使用Lodash:
app.use((req,res,next)=>setTimeout(next,random(1002000))
70kb库只用于随机函数?可以使用。同样,对于ES6模块,只能导入所需的依赖项。我在任何地方都使用Lodash。它比一般的
setTimeout
有什么好处?