2017-04-16 2 views
0

In meiner hapi.js Anwendung habe ich ein Plugin für eine Sammlung von Routen erstellt. Das Plugin enthält eine Indexdatei zum Definieren der Routen und eine Controllerdatei zum Definieren der Handler. Der folgende Code ist der Ausgangspunkt für die Anwendung.Wie gruppiere ich route handler in hapi.js

index.js

exports.register = function (server, options, next) { 
    server.route({ 
    method: 'GET', 
    path: '/coins', 
    handler: require('./getCoins') 
    }); 

    next(); 
}; 

getCoins.js

module.exports = function (request, reply) { 
    reply('get all coins called'); 
}; 

Dies funktioniert wie erwartet. Das Problem tritt auf, wenn ich versuche, mehrere Handler in einer Datei zu kombinieren. Der fehlerhafte Code aus den beiden Dateien (index.js, controller.js) ist wie folgt:

index.js

var controller = require('./controller.js'); 

exports.register = function (server, options, next) { 
    server.route({ 
    method: 'GET', 
    path: '/coins', 
    handler: controller.getAllCoins() 
    }); 

    server.route({ 
    method: 'POST', 
    path: '/coins', 
    handler: controller.createCoin() 
    }); 

    next(); 
}; 

controller.js

var exports = module.exports = {}; 

exports.getAllCoins = function (request, reply) { 
    reply('get all coins called'); 
}; 

exports.createCoin = function(request, reply) { 
    reply('create new coin called'); 
}; 

Wenn auf diese Weise meinen Code zu strukturieren, ich mit ERROR: reply is not a function enden. Es scheint, dass das Antwortobjekt überhaupt nicht instanziiert wird. Ich kann jeden Handler in einer separaten Datei definieren und das würde funktionieren, aber ich würde es vorziehen, die Handler in der gleichen Datei zu behalten, wenn ich kann. Was fehlt mir hier?

EDIT Hinzufügen von Inhalten console.log(controller);

{ 
    getAllCoins: [Function], 
    createCoin: [Function], 
    getCoin: [Function], 
    updateCoin: [Function], 
    deleteCoin: [Function] 
} 
+0

Was ist der Wert des Controller-Objekts in der Indexdatei? Verwenden Sie console.log, muss ein Problem mit den Exporten sein –

+0

Ich habe das Ergebnis zu den Fragen hinzugefügt, um eine saubere Formatierung beizubehalten. – ThomasNichols89

+0

Sehr seltsam, gibt es irgendwo in Ihrem Code irgendwelche Pfeilfunktionen? –

Antwort

0

Es stellt sich heraus, dass die handler: controller.getAllCoins() Linie in der index.js Datei eine benannte Variable erwartet, keinen Funktionsaufruf. Durch Ändern dieser Zeile in handler: controller.getAllCoins wurde das Problem behoben.