2016-10-04 1 views
0

J'utilise express-generator pour générer les routes de base.Nœud ExpressJS Routes problème dans le routage

Voici ce que j'ai jusqu'à présent dans les routes

var express = require('express'); 
var router = express.Router(); 
var ctrl = require('../controller/index'); 
var validation = require("../validations/user"); 
/* GET home page. */ 
router.route('/').get(ctrl.index); 
router.route('/registerUser').post(validation.registerUser,ctrl.registerUser); 

Il fonctionne très bien.

Après avoir activé les routes ci-dessous

router.route('/loginUser').post(validation.loginUser,ctrl.loginUser); 
module.exports = router; 

Je reçois erreur comme

opt/lampp/htdocs/MedApp/node_modules/express/lib/router/route.js:171 
     throw new Error(msg); 
     ^

Error: Route.post() requires callback functions but got a [object Undefined] 
    at /opt/lampp/htdocs/MedApp/node_modules/express/lib/router/route.js:171:15 
    at Array.forEach (native) 

Comment puis-je permettre à plus de routes dans le fichier routes.js?

Aide pls

Répondre

1

il semble que vous ne l'avez pas exporté la fonction ctrl.registerUser dans index.js.

Assurez-vous que vous avez quelque chose comme ça

dans la validation/user.js

exports.registerUser=function(req,res,next){...}; 

exports.loginUser=function(req,res,next){...}; 

dans le contrôleur/index.js

exports.registerUser=function(req,res){...}; 

exports.loginUser=function(req,res){...}; 
+0

Merci, mais à l'intérieur de la fonction .. Comment puis-je avoir la logique d'appeler le contrôleur .. par exemple, ' validation.registerUser, ctrl.registerUser'? –

+0

de quelle fonction parlez-vous? –

+0

Je dois appeler le 'ctrl.registerUser' une fois que j'ai frappé l'utilisateur registerUser –

0

L'erreur indique que Route.post() requires a callback.

Vous avez:

router.route('/loginUser').post(validation.loginUser,ctrl.loginUser); 

Utilisez une fonction de rappel comme ceci:

router.post('/loginUser', function(req, res) { 
    //run your loginUser logic here 
}); 

module.exports = router; //make this file available to other files 
+0

Cela fonctionne, mais comment puis-je avoir le 'validation.registerUser, ctrl.registerUser' à l'intérieur? –

+0

Je ne suis pas sûr de comprendre ce que vous demandez. Pouvez-vous clarifier? Ce code n'a pas l'air tout à fait correct. Vous pouvez exécuter ces fonctions 'validation.registerUser'' ctrl.registerUser' dans la fonction de rappel. – vincentjp

+0

De cette façon, 'router.route ('/ loginUser'). Post (validation.loginUser, ctrl.loginUser);' je peux appeler la fonction 'loginUser' dans le contrôleur qui est appelé. Mais comme vous l'avez dit. Comment puis je faire ça ? –