web-dev-qa-db-fra.com

Comment modifier le délai d'expiration par défaut de la demande nodejs?

J'utilise un serveur Node/express. Le délai d'expiration par défaut de l'express est de 120 000 ms, mais cela ne me suffit pas. Lorsque ma réponse atteint 120 000 ms, la console enregistre POST /additem 200 120006ms et que la page affiche une erreur, je souhaite donc définir un délai plus long. Comment je ferais ça?

59
MarsOnly

Je suppose que vous utilisez express, en fonction des journaux que vous avez dans votre question. La clé consiste à définir la propriété timeout sur le serveur (le paramètre suivant définit le délai d’expiration sur une seconde, utilisez la valeur de votre choix):

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});
server.timeout = 1000;

Si vous n'utilisez pas Express et ne travaillez qu'avec un noeud Vanilla, le principe est le même. Les éléments suivants ne renverront pas de données:

var http = require('http');
var server = http.createServer(function (req, res) {
  setTimeout(function() {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
  }, 200);
}).listen(1337, '127.0.0.1');

server.timeout = 20;
console.log('Server running at http://127.0.0.1:1337/');
84
SomeKittens

Essaye ça:

var options = {
    url:  'http://url',
    timeout: 120000
}

request(options, function(err, resp, body) {});

Reportez-vous à la documentation de request pour d'autres options.

37
Lee

Pour une requête spécifique, on peut définir timeOut sur 0, ce qui n’existe aucun délai jusqu’à ce que nous obtenions une réponse de la base de données ou d’un autre serveur.

request.setTimeout(0)
9
Bhavik

Pour ceux qui ont une configuration dans bin/www, ajoutez simplement le paramètre timeout après la création du serveur http.

var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces
*/
server.listen(port);
server.timeout=yourValueInMillisecond
4
Rohith K D

Avec la dernière version de NodeJS, vous pouvez expérimenter ce correctif pour singe:

const http = require("http");
const originalOnSocket = http.ClientRequest.prototype.onSocket;
require("http").ClientRequest.prototype.onSocket = function(socket) {
    const that = this;
    socket.setTimeout(this.timeout ? this.timeout : 3000);
    socket.on('timeout', function() {
        that.abort();
    });
    originalOnSocket.call(this, socket);
};
0
Bela Vizy