2015-09-09 1 views
1

J'apprends Node.js. Je suis en train de construire une application de base pour l'apprentissage. En ce moment, j'essaye de faire une page de maître/détail. Voici la page maître.Node.js - Rediriger dans Express avec une page principale/détaillée

/views/master.ejs

<html> 
    <body> 
    [items would go here] 
    <a href="/new">add new</a> 
    </body> 
</html> 

L'utilisateur verra cette page lors de leur visite '/'. Lorsqu'ils cliquent sur le lien "ajouter un nouveau", je les amène à "/ new". Le code de la vue est ici:

/views/detail.ejs

<html> 
    <body> 
    <form id="myForm" method="post" action="/new"> 
     <button type="submit">Submit</button> 
    </form> 
    </body> 
</html> 

Je ces travail avec succès. Toutefois, lorsqu'un utilisateur clique sur Envoyer, je ne suis pas sûr de savoir comment les rediriger vers la vue "/". À ce stade, mon code de routage ressemble à ceci:

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

/* GET the master page. */ 
router.get('/', function(req, res) { 
    res.render('master', { }); 
}); 

/* GET the new page */ 
router.get('/new', function(req, res) { 
    res.render('detail', { }); 
}); 

/* POST new item */ 
router.post('/new', function(req, res) { 
    console.log('creating item...'); 

    // The following line just shows "undefined" in the browser" 
    // I don't know if 1) Its correct or 2) If I should do it some other way 
    res.redirect(200, '/', { }); 
}); 

Comment gérer les vues de chargement dans un scénario de page principale-détail?

Merci!

+0

Quelle version d'express utilisez-vous? Je ne pense pas que 'redirect' prend un 3ème argument http://expressjs.com/api.html – azium

+0

@azium J'utilise 4.9.0 –

Répondre

1

Avez-vous essayé de rediriger sans passer d'un modèle de vue? Par exemple:

res.redirect('/projects/setup/website/details'); 

Aucun des échantillons dans le documentation montrent un modèle de vue étant passé.

+0

Ah ha! Je devrais faire attention aux docs. Merci de votre aide. –

0

Il semble que vous essayez de rediriger dans un POST. Si vous souhaitez rendre la page d'accueil après votre requête POST, affichez simplement le résultat attendu.

/* POST new item */ 
router.post('/new', function(req, res) { 
    // do server stuff ... 

    res.render('master'); 
}); 
+0

Après qu'un utilisateur clique sur le bouton" soumettre ", je les veux" master "vue à charger. De plus, l'URL dans la barre d'adresse de leur navigateur devrait être "/". D'après ce que je peux dire, l'approche que vous montrez ne fera pas le dernier. –

0

Je pense que l'utilisation ci-dessous le code peut être utile.

router.post('/new', function(req, res) { 
console.log('creating item...'); 
res.redirect('/'); // if you don`t specify status defaults to 302 found 
}); 

voir ce lien: http://expressjs.com/api.html#res.redirect

+0

Pas de chance. Je reçois toujours une erreur "404". Bizarrement, son appendice "200" Dans la fenêtre de la console, je vois: 'GET/200 404 3.453 ms - 90' Je n'ai aucune idée d'où vient ce 200. –

+0

res.redirect ('/'); essayez ceci cela fonctionnera –