Bonjour,
je debute sur node et tente d'utiliser express. j'utilise express generator d'ou la quantité de code. mon probleme est que je n'arrive pas a creer un nouvelle "route". la racine du site (localhost:3000) elle marche tres bien. je me suis pourtant pas fouler, j'ai juster copier le mode peratoire utiliser pour l'index mais rien y fais. j'ai un erreur 404 dans la console.

app.js :

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var test = require('./routes/test');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);
app.use('/test', test);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});
module.exports = app;

routes/test.js :

var express = require('express');
var router = express.Router();

router.get('/test', function(req, res, next) {
console.log('test');                                                      //ne s'affiche pas
  res.render('test', { title: 'test' });
});
module.exports = router;

et views/test.ejs

<h1>test</h1>

je n'ai pas toucher a bin/www
merci d'avance a ceux qui pourront m'aider

7 réponses


Orodan
Réponse acceptée

Bonjour,

quand tu utilises un

app.use('/test', test); 

tu demandes à ton serveur de faire traiter toutes les requêtes commençant par "/test" par le routeur représenté par la variable "test".

Ensuite, dans ce routeur, une fois qu'une url commençant par "/test" a déjà été détectée, tu lui demandes d'y trouver une nouvelle fois la forme "/test" grâce à :

router.get('/test', function(req, res, next) {
    console.log('ne s\'affiche pas!!!!!!');
    res.render('test', { title: 'test' });
});

Ce qui fait que l'url que tu gères avec ta fonction n'est pas "/test" mais bien "/test/test".

Si tu veux gérer simplement la route "/test", je te conseille plutôt quelque chose de cette forme là :

app.get('/test', function (res, res, next) {
    // Do some code
});

J'espère que ca t'aideras

larube

Je ne vois aucun

app.listen(3000, function() {
    // Code here
});

Ton serveur est-il bien démarré ?

carnival187

merci d'avoir repondu si rapidement.
oui mon serveur est demarré puisque j'ai une erreur 404 dans la console et sur mon navigateur et la page d'accueil marche.
Si je n'ai pas app.listen d'ecris c'est parce que j'utilise le code prefait de express generator, du coup le demarrage se fait dans bin/www.

J'ai donc fait un autre essai sans express generator, mais j'ai le meme probleme

app.js :

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');

var routes = require('./routes/index');
var test = require('./routes/test');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/test', test);
app.use('/users', users);

app.listen(3000, function(){
    console.log('3000');
});

routes/test.js :

var express = require('express');
var router = express.Router();

console.log('s\'affiche au demarrage');

router.get('/test', function(req, res, next) {
    console.log('ne s\'affiche pas!!!!!!');
    res.render('test', { title: 'test' });
});
module.exports = router;

views/test.ejs

<h1>test</h1>

Si quelqu'un peut voir ce que je vois pas....

sizo0

Salut ! Tes routes sont sur routes/index.js. Tu peux nous afficher le code de ce fichier.

carnival187
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;
sizo0

Voilà, ici tu peux ajouter tes routes.

router.get('/test', function (req, res, next) {
   console.log('Ce texte s\'affiche');
   res.render('test');
});

Tel que views/test.ejs est un fichier template ejs.

carnival187

super sa marche, avec les explication en plus c'est niquel. Du coup comme je souhaite garder l'architecture d'express generator j'ai juste modifié routes/test.js :

var express = require('express');
var router = express.Router();

console.log('s\'affiche au demarrage');

router.get('/', function(req, res, next) {
    console.log('s'affiche enfin.....');
    res.render('test', { title: 'test' });
});
module.exports = router;

merci encore, super efficace ce forum (premier post ici), je reviendrai ;)