2016-09-23 2 views
-1

Я прочитал source code из connectJS, эта часть запутать меняПочему подключение принимает третий параметр, как передать его в

function createServer() { 
    function app(req, res, next){ app.handle(req, res, next); } 
    merge(app, proto); 
    merge(app, EventEmitter.prototype); 
    app.route = '/'; 
    app.stack = []; 
    return app; 
} 
module.exports = createServer; 

В основном next является конечным обработчиком, когда внутренний стек исчерпан и app должны идти непосредственно для http.createServer, которые принимают функцию длины 2. Однако app объявил принять 3 параметра. Так где перейти в третий параметр?

Для тех, кто прочитал исходный код, точка должна быть clear.If никогда не читать исходный код, я настоятельно рекомендую прочитать его, он short.And тогда, может вернуться к этому вопросу

+0

Прохладно, круто ... Вы также прочитали [их документацию] (https://github.com/senchalabs/connect) вместо исходного кода? Потому что он объясняет это основное поведение, поскольку он является основой того, как промежуточное программное обеспечение работает в Sencha's connect (и производные проекты, такие как Express.js) –

+0

@ Mike'Pomax'Kamermans Конечно, я сделал, пожалуйста, покажите мне, как можно пройти в 'next' параметр «Приложение» уже возвращено, прежде чем клиент может что-то сделать !!!! – Guigui

+0

@Guigui: Downvotes анонимны. Я не специалист по node.js, но вы определенно, похоже, очень воинственно относитесь к людям, которые здесь, чтобы помочь вам в свое время без каких-либо обязательств. На самом деле, ваш вопрос не очень ясен: что именно вы просите? –

ответ

0

Для тех, который касается, я найти ответ на этот вопрос мы можем сделать что-то вроде этого

var connect=require('connect')(); 

var http=require('http') 

http.createServer(function (req,res) { 
    connect(req,res,function() { 
     console.log("I am next") 
    }) 
}) 

Таким образом, мы можем передать в next в качестве конечного обработчика

Обычно мы используем

var connect=require('connect')(); 

var http=require('http') 

http.createServer(connect) 

Просто игнорировать скрытые особенность подключения рамки

Кроме того, эта функция не введена в their document по какой-то причине

================ ======================================================== 0 0 прочитайте несколько тестовых примеров в подключении, получили лучшее понимание, почему оно существует

it('should work as middleware', function(done){ 
    // custom server handler array 
    var handlers = [connect(), function(req, res, next){ 
     res.writeHead(200, {'Content-Type': 'text/plain'}); 
     res.end('Ok'); 
    }]; 

    // execute callbacks in sequence 
    var n = 0; 
    function run(req, res){ 
     if (handlers[n]) { 
     handlers[n++](req, res, function(){ 
      run(req, res); 
     }); 
     } 
    } 

    // create a non-connect server 
    var server = http.createServer(run); 

    request(server) 
    .get('/') 
    .expect(200, 'Ok', done); 
    }); 

Точно так же, как next может работать как сигнал для перемещения вперед в стеке внутри соединения, next в уровне рамки может связать цепочку с другой инфраструктурой, хотя нет очевидного способа связать промежуточное программное обеспечение вместе в connect.Maybe express может принимать Преимущество этой скрытой функции больше

+0

Если не в doc, то это может измениться без предупреждения, и мы не должны его использовать , –

+0

@NidhinDavid спасибо, по крайней мере, это правильный ответ на этот вопрос, а не на прямое голосование вопрос напрямую, даже не понимая темы – Guigui

+0

Я не пропустил ваш вопрос, ни кто-нибудь в течение длительного времени –

Смежные вопросы