2015-07-10 9 views
6

In Express Ich habe so etwas wie dies:Wie kann ich eine Middleware auf meiner Route hinzufügen?

router.get('/foo', middlewareFunction, function (req, res) { 
    res.send('YoYo'); 
}); 

Was ist die Form für eine Middleware in hapi? Wenn ich dies:

server.route({ 
    method: 'GET', 
    path: '/foo', 
    handler: function (request, reply) { 
     reply('YoYo'); 
    } 
}) 
+1

Was möchten Sie in der Middleware tun? –

Antwort

4

Die Route pre Option solche Pre-Handler Methoden ermöglicht die Definition, haben bitte einen Blick auf http://hapijs.com/api#route-prerequisites

const Hapi = require('hapi'); 
const server = new Hapi.Server(); 
server.connection({ port: 80 }); 

const pre1 = function (request, reply) { 

    return reply('Hello'); 
}; 

const pre2 = function (request, reply) { 

    return reply('World'); 
}; 

const pre3 = function (request, reply) { 

    return reply(request.pre.m1 + ' ' + request.pre.m2); 
}; 

server.route({ 
    method: 'GET', 
    path: '/', 
    config: { 
     pre: [ 
      [ 
       // m1 and m2 executed in parallel 
       { method: pre1, assign: 'm1' }, 
       { method: pre2, assign: 'm2' } 
      ], 
      { method: pre3, assign: 'm3' }, 
     ], 
     handler: function (request, reply) { 

      return reply(request.pre.m3 + '\n'); 
     } 
    } 
}); 
+0

Ich weiß, es ist ein bisschen Neuling Frage, aber wie in Funktion 2 zu stoppen, wenn die Auth fehlgeschlagen sagen? –

7

können Sie die server.ext Eigenschaft verwenden, um eine Erweiterungsfunktion in einem der available extension points zu registrieren.

Zum Beispiel:

server.ext('onRequest', function (request, reply) { 
    // do something 
    return reply.continue(); 
}); 

Diese Funktion kann nützlich sein. Alles hängt davon ab, was Sie mit der Middleware machen wollen.

+0

Sicher, ich werde es mit dem 'onPreHandler'-Event versuchen. –

0

Zusätzlich Antwort auf @gastonmancini, wenn Sie v17 und höher verwenden, möchten Sie vielleicht Verwendung:

server.ext('onRequest', (request, h) => { 
    // do something 
    return h.continue; 
}); 

nach hapi docs:

„Return h.continue anstelle von reply.continue() fortfahren, ohne die Antwort zu ändern. "

Verwandte Themen