我使用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上运行所以我的延迟几乎为零)
答案 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)
延迟一到两秒。