2017-04-16 1 views
0

Dans mon application hapi.js, j'ai créé un plugin pour un ensemble de routes. Le plugin contient dans le fichier d'index pour définir les routes, et un fichier de contrôleur pour définir les gestionnaires. Le code suivant est le point de départ de l'application.Comment regrouper les gestionnaires d'itinéraires dans 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'); 
}; 

Cela fonctionne comme prévu. Le problème se pose lorsque j'essaie de combiner plusieurs gestionnaires en un seul fichier. Le code incriminé des deux fichiers (index.js, controller.js) est la suivante:

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'); 
}; 

Lors de la structuration mon code de cette manière, je me retrouve avec ERROR: reply is not a function. Il semble que l'objet réponse ne soit pas instancié du tout. Je peux définir chaque gestionnaire dans un fichier séparé et cela fonctionnerait, mais je préférerais garder les gestionnaires dans le même fichier si je le peux. Qu'est-ce que j'oublie ici?

EDIT Ajout de contenu console.log(controller);

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

Quelle est la valeur de l'objet contrôleur dans le fichier d'index? Utilisez console.log, doit être un problème avec les exportations –

+0

J'ai ajouté le résultat aux questions pour maintenir le formatage propre. – ThomasNichols89

+0

Très étrange, y a-t-il des fonctions de flèches utilisées n'importe où dans votre code? –

Répondre

0

avère que la ligne handler: controller.getAllCoins() dans le fichier index.js attend une variable nommée, et non un appel de fonction. La modification de cette ligne à handler: controller.getAllCoins a résolu le problème.