在express中添加故意延迟

Aks*_*hat 34 node.js express

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

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

mag*_*cnx 71

用作所有请求的中间件

  app.use(function(req,res,next){setTimeout(next,1000)});
Run Code Online (Sandbox Code Playgroud)

  • 使用它,如es6:`app.use((req,res,next)=> setTimout(next,1000))` (2认同)
  • @ya_dimon,有拼写错误的setTimout,应为setTimeout (2认同)

Dav*_*don 43

只需拨打res.send一个内部的setTimeout:

setTimeout((function() {res.send(items)}), 2000);
Run Code Online (Sandbox Code Playgroud)


Aza*_*rus 10

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

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

时间值为:

Max = 2000(有点......添加了最小值,所以实际上是 2100)

最小值 = 100


dur*_*rad 6

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

  • 称我为老派,但添加 1 行代码的依赖项似乎有点矫枉过正:https://github.com/flesler/connect-pause/blob/master/index.js (8认同)

Ban*_*nzy 6

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);
})
Run Code Online (Sandbox Code Playgroud)

然后请求 URL:http://localhost/fakeDelay/?t=2000 (本例中最大 5000 毫秒,默认值为 1000 毫秒)

更新: 使用 Promise。函数“sleep”可用于延迟任何 Express 响应或其他异步函数。

const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

app.get('/fakeDelay', async (req, res) => {
  await sleep(500);
  res.send([])
})
Run Code Online (Sandbox Code Playgroud)