Search code examples
javascriptnode.jsmultithreadingexpressblocking

How to extend the response timeout default time?


I'm having a little problem with thread blocking algorithms.

I have a route that generates a zip with huge size files.

The flow works like this: GetUrls > ObtainHugeSizeBuffer > GenerateZIP > UploadZIPToCloud

I cannot modify the timeout response default time of 2 minutes with the express-timeout module. I've also been trying to break the loopholes in the .nextTick() function.

I've even tried to look over queueing but I don't think that applies in this situation.

Do you guys have any idea how to expand the response time? - I strictly need to for one route only.


Solution

  • // start the server
    const server = app.listen(8080);
    
    // increase the timeout to 4 minutes
    server.timeout = 240000;
    

    This is the easiest way to extend server timeout, but it affects everything, not just one method.

    In your case (you wan't it only for on specific route):

    'use strict';
    
    const ms = require('ms');
    const express = require('express');
    const router = express.Router();
    
    router.route('/upload-files')
      .post(
        setConnectionTimeout('12h'),
        require('./actions/upload-files').responseHandler
      );
    
    function setConnectionTimeout(time) {
      var delay = typeof time === 'string'
        ? ms(time)
        : Number(time || 5000);
    
      return function (req, res, next) {
        res.connection.setTimeout(delay);
        next();
      }
    }
    
    exports.router = router;
    

    Not my code, found it in this thead: Node Express specific timeout value per route

    You need to google better :)