Git Product home page Git Product logo

express-timeout-handler's Introduction

express-timeout-handler

npm version Build Status Dependency Status devDependency Status Coverage Status

Express timeout middleware that ensures a response is returned to the client on a timeout event.

Add a global timeout to all your routes in express and add individual timeouts to specific routes. If a timeout happens the onTimeout function will be called. The onTimeout function MUST terminate the request with a response. When a timeout happens, this module will set a globalTimeout property on the response object to true and disable all methods on the response object which might try and send something after the timeout happened.

Note on streams: whenever a stream has started streaming to the response object, the onTimeout function will not be triggered. Or in other words: if a timeout happens after we start streaming, the stream will not be interrupted.

npm install --save express-timeout-handler

Usage

var timeout = require('express-timeout-handler');
var express = require('express');
var app = express();

var options = {

  // Optional. This will be the default timeout for all endpoints.
  // If omitted there is no default timeout on endpoints
  timeout: 3000,

  // Optional. This function will be called on a timeout and it MUST
  // terminate the request.
  // If omitted the module will end the request with a default 503 error.
  onTimeout: function(req, res) {
    res.status(503).send('Service unavailable. Please retry.');
  },

  // Optional. Define a function to be called if an attempt to send a response
  // happens after the timeout where:
  // - method: is the method that was called on the response object
  // - args: are the arguments passed to the method
  // - requestTime: is the duration of the request
  // timeout happened
  onDelayedResponse: function(req, method, args, requestTime) {
    console.log(`Attempted to call ${method} after timeout`);
  },

  // Optional. Provide a list of which methods should be disabled on the
  // response object when a timeout happens and an error has been sent. If
  // omitted, a default list of all methods that tries to send a response
  // will be disable on the response object
  disable: ['write', 'setHeaders', 'send', 'json', 'end'];
};

app.use(timeout.handler(options));

app.get('/greet', //The default timeout is in effect here
  function (req, res) {
    res.send('Hello world!');
  }
);

app.get('/leave',
  // This is a specific endpoint timeout which overrides the default timeout
  timeout.set(4000),
  function (req, res) {
    res.send('Goodbye!');
  }
);

app.listen(3000, function () {
  console.log('Server listening on port 3000');
});

License

MIT

express-timeout-handler's People

Contributors

hilleer avatar ludmilashilo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.