Je suis nouveau sur nodejs. Il existe un tel morceau de code dans l'incroyable NodeJS, qui utilise un middleware pour réaliser l'impression de la console lorsque le temps de demande de code est trop long
//request-time.js
module.exports = function(opts){
var time = opts.time||100;
return function(req,res,next){
var timer = setTimeout(function(){
console.log(req.method + " , " + req.url + " , too long!");
},time);
var end = res.end;
res.end = function(chunk,encoding){
res.end = end; //
res.end(chunk,encoding); //直接end(chunk,encoding)会出错
clearTimeout(timer);
};
next();
}
}
La partie commentaire est ma question. Je suppose qu'il y a quelque chose à ce sujet au final, je ne sais pas si je comprends bien
.
Le terme « fermeture » vient de la combinaison d'un bloc de code à exécuter (car les variables libres sont contenues à l'intérieur du bloc, ces variables libres et les objets auxquels elles font référence ne sont pas libérées) et de la liaison prévue pour les variables libres Environnement informatique (portée) ---Encyclopédie Baidu
Parlons d’abord du concept de fermeture
Votre compréhension est correcte
,
Il s'agit du processus de vérification, la raison en est que si vous appelez end directement, cette extrémité est quittée de force à cause de cette fermeture, elle sera donc automatiquement liée à l'environnement informatique, donc ceci est le plus tardif. C'est Window, donc appeler end directement provoquera une erreur