IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Express : bug de contrôleur qui n'est pas pris en compte


Sujet :

NodeJS

  1. #1
    Membre actif
    Avatar de Le Barde
    Homme Profil pro
    Chanteur
    Inscrit en
    Juillet 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chanteur

    Informations forums :
    Inscription : Juillet 2007
    Messages : 343
    Points : 259
    Points
    259
    Par défaut Express : bug de contrôleur qui n'est pas pris en compte
    Bonjour à tous,

    J'ai utilisé generator-express (donc avec yeoman) pour me créer un projet Express.
    Depuis j'ai pas mal avancé, mais lorsque j'essaie d'ajouter des routes dans un nouveau contrôleur, ça ne fonctionne pas :

    Code fichier app/controllers/recherche.js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    var express = require('express'),
      router = express.Router(),
      db = require('../models'),
      s = require('../data/static');
     
     
    module.exports = function (app) {
      app.use('/recherche', router);
      console.log('recherche.js : fonction exportée');
    };
     
     
    router.post('/recherche', function(req, res, next) {
      console.log('POST : ' + req);
      console.log('recherche.js : /recherche');
      res.render('index', {
        title: 'Recherche',
        s: s  // Données statiques
      });
     
    });
     
     
    console.log('recherche.js : racine');

    Voici où ce code est chargé :

    Code fichier app/controllers/home.js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    var express = require('express');
    var glob = require('glob');
     
    var favicon = require('serve-favicon');
    var logger = require('morgan');
    var cookieParser = require('cookie-parser');
    var bodyParser = require('body-parser');
    var compress = require('compression');
    var methodOverride = require('method-override');
     
    module.exports = function(app, config) {
      app.set('views', config.root + '/app/views');
      app.set('view engine', 'jade');
     
      // app.use(favicon(config.root + '/public/img/favicon.ico'));
      app.use(logger('dev'));
      app.use(bodyParser.json());
      app.use(bodyParser.urlencoded({
        extended: true
      }));
      app.use(cookieParser());
      app.use(compress());
      app.use(express.static(config.root + '/public'));
      app.use(methodOverride());
     
      var controllers = glob.sync(config.root + '/app/controllers/*.js');
      controllers.forEach(function (controller) {
        require(controller)(app);
      });
     
      // Initialisation de socket.io
      require(config.root + '/config/io')(app.io);
     
      app.use(function (req, res, next) {
        var err = new Error('Not Found');
        err.status = 404;
        next(err);
      });
     
      if(app.get('env') === 'development'){
        app.use(function (err, req, res) {
          res.status(err.status || 500);
          res.render('error', {
            message: err.message,
            error: err,
            title: 'error'
          });
        });
      }
     
      app.use(function (err, req, res) {
        res.status(err.status || 500);
        res.render('error', {
          message: err.message,
          error: {},
          title: 'error'
        });
      });
     
    };

    Or, au lancement de l'application, j'ai :
    Citation Envoyé par node.js / application
    $ npm start

    > mon-application-com@0.0.1 start /mon-répertoire-source/04-source
    > node index.js

    recherche.js : racine
    recherche.js : fonction exportée
    socket.io : ok.
    Serveur démarré : http://localhost:3000
    GET / 304 287.649 ms - -
    GET /css/styles.css 304 2.149 ms - -
    GET /js/jquery-2.1.1.min.js 304 0.965 ms - -
    GET /js/front.js 304 2.749 ms - -
    GET /img/icone.png 304 0.797 ms - -
    Error: Not Found
    at Layer.handle (/mon-répertoire-source/04-source/config/express.js:35:15)
    at trim_prefix (/mon-répertoire-source/04-source/node_modules/express/lib/router/index.js:240:15)
    at /mon-répertoire-source/04-source/node_modules/express/lib/router/index.js:208:9
    at Function.proto.process_params (/mon-répertoire-source/04-source/node_modules/express/lib/router/index.js:269:12)
    at next (/mon-répertoire-source/04-source/node_modules/express/lib/router/index.js:199:19)
    at /mon-répertoire-source/04-source/node_modules/express/lib/router/index.js:137:5
    at /mon-répertoire-source/04-source/node_modules/express/lib/router/index.js:250:10
    at next (/mon-répertoire-source/04-source/node_modules/express/lib/router/index.js:160:14)
    at next (/mon-répertoire-source/04-source/node_modules/express/lib/router/index.js:176:38)
    at next (/mon-répertoire-source/04-source/node_modules/express/lib/router/index.js:176:38)
    POST /recherche 404 5.983 ms - -
    Je suis donc allé voir / (ce qui a chargé les bonnes choses), puis j'ai cliqué sur le bouton qui est fabriqué de cette manière dans un template jade :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        form#search(method="post" action="/recherche")
          input#search_input
          button#search_btn
            span #{s.home.recherche}
    Qu'en pensez-vous ? Si je place le code de recherche.js dans le contrôleur de base (app/controllers/home.js), tout se passe bien.

    Merci d'avance,
    Le Barde.
    Hayiiiiiiiiiiiiii !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut

    C'est normal : tu préfixe ton routeur avec "/recherche", donc toutes les routes rattachées à ce routeur seront préfixées par "/recherche". Donc ta route POST n'est pas "/recherche" mais "/recherche/recherche".

    Soit tu ne préfixes pas ton router app.use(router);.
    Soit tu change ta route POST router.post('/', function(req, res, next) { /*...*/ });.

  3. #3
    Membre actif
    Avatar de Le Barde
    Homme Profil pro
    Chanteur
    Inscrit en
    Juillet 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chanteur

    Informations forums :
    Inscription : Juillet 2007
    Messages : 343
    Points : 259
    Points
    259
    Par défaut
    Oh oui, Enerian je t'aime !

    Franchement bien vu :-)

    Alors autre question : pourquoi le routeur principal, prénommé "home.js", n'a-t-il pas de préfixe ?

    EDIT : Après avoir rapidement cherché, il semble en effet que home.js récupère les routes par défaut, et que les autres fichiers sont préfixés. Pas évident, et surtout, pas beaucoup documenté je trouve... C'est dommage, et surtout j'espère que ça ne préfigure pas quelque chose de trop mauvais pour la suite des opérations avec Express !

    Merci encore !
    Hayiiiiiiiiiiiiii !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 28/01/2010, 12h01
  2. Réponses: 2
    Dernier message: 27/04/2009, 09h32
  3. text-align:right; qui n'est pas pris en compte ?
    Par pop_up dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/04/2008, 12h15
  4. Problème avec un div qui n'est pas pris en compte
    Par boss_gama dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 25/07/2006, 16h32
  5. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo