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?
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/');
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.
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)
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
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);
};