如何在expressjs中重载app.listen的功能

Jot*_*ham 8 node.js express

我一直在尝试(基本上)创建一个工厂函数,为我的十几个较小的专用服务器配置和构建一个expressjs服务器.部分原因我想增加listen功能.

我想知道最好的方法.我也在寻找可重复使用的设计选择.

服务器正常创建:

var httpServer = express();
    ...
Run Code Online (Sandbox Code Playgroud)

由于express的设计方式(不确定我是否正确)我无法访问{whatever} .prototype.listen.所以我提出了两种方法.

在当前范围中使用其他变量:

 var oldListen = httpServer.listen;
 httpServer.listen = function(callback){
    ...
    oldListen.call(httpServer, options.port, options.host, function(){
       ...
       if ( typeof callback == 'function' ) callback();                    
    });
 };
Run Code Online (Sandbox Code Playgroud)

哪个有效且相当直接,但后来我有一个可变的吊装疣.我也有一个闭包解决方案,但我认为实际上可能过于迟钝:

httpServer.listen = (function(superListen){
   return function(callback){
      ...
      superListen.call(httpServer, options.port, options.host, function(){
         ...               
         if ( typeof callback == 'function' ) callback();
      });
   };                                             
})(httpServer.listen);
Run Code Online (Sandbox Code Playgroud)

这两个示例都是工厂上下文的一部分,我故意减少传递给函数的参数.

任何帮助,将不胜感激.

Víc*_*sta 1

您应该能够轻松地重载快速监听函数。您可以在以下对象路径中访问它:express.application.listen

所以,你可以实现这样的事情:

var express = require('express');

express.application.baseListen = express.application.listen;
express.application.listen = function(port) {
console.log('Port is: ' + port);
  this.baseListen(port);
};
Run Code Online (Sandbox Code Playgroud)

监听功能的实现在express模块​​文件夹下的以下路径:node_modules\express\lib\application.js