通过`http.createServer`代理手动注入快速应用程序

时间:2016-01-17 03:26:52

标签: node.js http express

我目前正在为用户网站创作一个组件,为其服务器添加了大量资源。就我而言,我想使用express,但用户可能正在使用表达自己或其他一些Web框架。

因为我希望这只是开箱即用,我试图通过代理http.createServer来设置我的快速管道。以这种方式注入管道似乎在我处理请求的情况下工作得相当好,但是在我让它失败并执行用户回调的情况下它会失败(具体来说,它表示已经发送了响应头)。 / p>

以下是我正在研究的样本。有什么想法吗?

var http = require('http');
var express = require('express');

var setupProxy = function setupProxy() {
    var app = buildApp();

    var oldCreateServer = http.createServer;
    http.createServer = function(callback) { 
        return oldCreateServer(function(req, res) {n
            app.apply(this, arguments);

            if (!res.finished) {
                callback.apply(this, arguments);
            }
        });
    };
};

var buildApp = function buildApp() {
    var app = express();

    app.use('/test', function(req, res) {
        res.send('Hello World');
    });

    return app;
};

1 个答案:

答案 0 :(得分:1)

我怀疑当您的任何路线都没有匹配时,您的快速处理会创建默认的404响应。因此,当您不处理它时,这将是已发送标题的原因,但尝试将其传递。

所以,我认为你需要你自己的404处理程序,它不会对请求写任何内容(例如什么都不做),但是让Express不要处理它。

或者,另一种可能性是从您的快速404处理程序调用用户的服务器回调,而不是其他地方。