【问题标题】:How does the 'reverse path' in Node.js Connect work?Node.js Connect 中的“反向路径”如何工作?
【发布时间】:2013-04-16 16:51:27
【问题描述】:

所以我理解 Node.js Connect 的工作方式就像一个堆栈,它通过它运行,从顶部开始到底部。从其作者http://howtonode.org/connect-it 的 Connect 介绍中,它显示了一个类似

的示例
var Connect = require('connect');

module.exports = Connect.createServer(
  require('./log-it')(),
  require('./serve-js')()
);

文章内容

每一个请求都从外部进入洋葱,然后逐层遍历 层,直到它碰到处理它并产生响应的东西。 在 Connect 术语中,这些称为过滤器和提供程序。一层 提供响应,路径发生反向。

我对“一旦层提供响应,路径会反向”感到特别好奇。这是怎么发生的?每个中间件都被再次调用,但顺序相反?

【问题讨论】:

    标签: node.js connect middleware


    【解决方案1】:

    不,它们不会再次被反向调用,但每个中间件都有机会对请求方法进行猴子修补并劫持它们。这并不理想。

    // basic logger example
    module.exports = function () {
      return function logger(req, res, next) {
        var writeHead = res.writeHead;
        res.writeHead = function (code, headers) {
          console.log(req.method, req.url, code);
          res.writeHead = writeHead;
          return res.writeHead(code, headers);
        };
        next();
      };
    };
    

    现在,此代码存在问题,因为 writeHead 不是设置状态代码的唯一方法,因此它不会捕获所有请求。但这是中间件在输出时捕获事件的基本方式。

    【讨论】:

    • 清除,谢谢!然而,我建议扩展 Connect 以支持具有两个“方向”的中间件,向下和向上,这将使过程更加透明。向下函数称为“洋葱内部”,向上函数称为“向外”,即反向路径。
    • FWIW,我刚刚讨论了一个新的 node 网络界面,它更容易编写。 github.com/creationix/moonslice-node/blob/master/slides/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2020-10-04
    • 2016-03-18
    • 2013-09-07
    • 2021-03-16
    相关资源
    最近更新 更多