2016-07-18 21 views
1

Neu bei Hapi, meine erste App zu schreiben. Ich habe meine Routen und Controller in separaten Dateien in jedem Modul. Bisher hatte ich bisher erfordern Controller in meiner Routen-Datei wie:Problem mit dem Zugriff auf Controller in Routen in meiner Hapi App

const controller = require('./controller'); 

und dann schreiben Routen wie:

module.exports = [{ 
    path: '/items/{id}', 
    method: 'GET', 
    handler: controller.getItemById 
}]; 

So weit so gut.

Jetzt möchte ich Caching in meinen Controller-Methoden verwenden. Dies zwang mich, meinen Controller in ein Plugin zu konvertieren.

Also mein Controller sieht nun wie:

exports.register = (server, options, next) => { 

    const itemCache = (id, itemId) => { 
     // do caching stuff 
    } 

    const getItemById = (request, reply) => { 
    // do stuff, use itemCache 
    } 

    server.expose({ 
     getItemById: getItemById 
    }); 

    next(); 
}; 

Die Frage ist nun, wie ich Zugriff auf die Steuerung in meine Routen-Datei? server.dependency() ist für die routes-Datei nicht verfügbar.

Antwort

0

Ich bin auch neu Hapi obwohl ich die beste und die meisten Standard-Weg, dies zu handhaben in Hapi sagen würde entweder

A wäre) machen Routen es eigenes Plugin ist auch so der Server durch

geben wird

oder

B) Machen Sie den einzigen Export der Routenindexdatei eine Funktion, die den Server als Parameter akzeptiert. und gibt die Routen für den Server zurück. Rufen Sie es nach dem Erstellen Ihres Servers in Ihrer Hauptindexdatei auf.

Denken Sie auch daran, dass Sie, wenn Sie nur das Serverobjekt in Ihren Controllern für Funktionen benötigen, die Handler für Ihre Routen sein werden, das Serverobjekt vom Anforderungs-Parameter an diese Funktionen übergeben können. (ps das ist Lana von der Gitterplatte: P)