2013-02-06 34 views
27

Im sử dụng express với node.js và thử nghiệm một số tuyến đường nhất định. Tôi đang làm tute này tại http://coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express-and-mongodb/Thêm thời gian chờ cố ý bằng cách thể hiện

Im gọi http://localhost:3000/wines qua ajax (nội dung không quan trọng). Nhưng tôi muốn kiểm tra độ trễ. Tôi có thể làm một cái gì đó như làm cho phản ứng nhanh sau 2 giây? (Tôi muốn mô phỏng các bộ nạp ajax và tôi đang chạy trên localhost nên độ trễ của tôi là khá nhiều nil)

Trả lời

24

Chỉ cần gọi res.send bên trong một setTimeout:

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

Hãy thử connect-pause module. Nó làm tăng thêm độ trễ cho tất cả hoặc chỉ một số tuyến đường trong ứng dụng của bạn.

+0

Mô-đun đơn giản có hiệu quả như những gì giải pháp của @maggocnx khuyên. – adambullmer

+0

Gọi cho tôi trường cũ, nhưng việc thêm phụ thuộc vào 1 dòng mã có vẻ quá mức cần thiết: https://github.com/flesler/connect-pause/blob/master/index.js – Tobia

45

Sử dụng như middleware, cho tất cả các yêu cầu của bạn

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

Bạn cũng có thể chỉ cần viết riêng xử lý chậm trễ generic của bạn sử dụng một Promise hoặc gọi lại (sử dụng một lời hứa q trong trường hợp này):

tạm dừng .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; 

sau đó sử dụng nó tuy nhiên bạn muốn:

server.js:

var pause = require('./pause'); 

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

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

}); 
3

Để áp dụng nó globaly trên tất cả các yêu cầu, bạn có thể sử dụng đoạn mã sau:

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

giá trị Thời gian là:

Max = 2000 (loại .... giá trị tối thiểu được thêm vào thực tế là 210 của nó 0)

Min = 100

Các vấn đề liên quan