Node.js 在express中添加有意延迟
我在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
我正在呼叫
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
有什么好处?