res.redirect (‘retour’) avec parameters

J’ai un formulaire d’inscription sur chaque page de mon site web. Lors de l’enregistrement, une erreur peut survenir. Après avoir attrapé l’erreur, je dois retourner l’utilisateur à la page précédente, en affichant un message d’erreur. Le problème est que je ne sais pas à partir de quelle page l’utilisateur a effectué l’enregistrement, j’utilise donc res.redirect('back'); . Cependant, je ne peux pas simplement redirect l’utilisateur, je dois aussi afficher le message d’erreur, donc je dois passer un argument. Mais res.redirect('back', (reg_error:'username')}) ne peut pas être utilisé directement car res.redirect() ne prend pas en charge les parameters. Comment puis-je rendre la page précédente avec un paramètre?

Utiliser l’en-tête du référent pour trouver la page de votre utilisateur peut être utile:

 app.get('/mobileon', function(req, res){ backURL=req.header('Referer') || '/'; // do your thang res.redirect(backURL); }); 

Vous pouvez également vouloir stocker backURL dans req.session, si vous avez besoin qu’elle persiste sur plusieurs routes. N’oubliez pas de tester l’existence de cette variable, par exemple: res.redirect(req.session.backURL || '/')


edit: Depuis que ma réponse a reçu quelques votes positifs, j’ai typescript ma manière actuelle de le faire. Il a pris un peu de temps pour pouvoir être visualisé à l’ adresse https://gist.github.com/therealplato/7997908 .

La différence la plus importante consiste à utiliser un paramètre “bounce” explicite dans la chaîne de requête qui remplace l’URL du référent.

Une méthode très simple consiste à utiliser connect-flash , un middleware pour express qui exploite le middleware de session intégré à express pour transmettre des messages «flash» à la demande suivante.

Cela signifie que vous n’avez pas besoin d’append de champs pour suivre les URL ou les messages dans les modèles de formulaire ou d’itinéraire pour vos vues.

Il fournit une version simple de la même fonctionnalité dans Ruby on Rails .

(Évidemment, vous devez utiliser le framework Express pour pouvoir l’utiliser, mais je le recommande vivement aussi!)

Branchez-le comme ceci:

 var flash = require('connect-flash'); var app = express(); app.configure(function() { app.use(express.cookieParser('keyboard cat')); app.use(express.session({ cookie: { maxAge: 60000 }})); app.use(flash()); }); 

Et puis utilisez-le comme ceci:

 app.get('/flash', function(req, res){ req.flash('info', 'Flashed message') res.redirect('/'); }); app.get('/', function(req, res){ res.render('index', { message: req.flash('info') }); }); 

Si vous utilisez des sessions, vous pouvez simplement append cet object reg_error à l’object req.session avant votre redirection. Ensuite, il sera disponible sur l’object req.session lors du chargement de la page précédente.

Vous pourriez simplement le redirect comme res.redirect('..?error=1')

le ? tag indique au navigateur qu’il s’agit d’un ensemble de parameters facultatifs et que .. n’est qu’un rappel relatif à un chemin d’access (comme appeler cd .. sur un terminal pour revenir à un répertoire) et votre navigateur dirigera la page avec la balise correspondante. fin: http://.....?error=1

alors vous pouvez simplement tirer l’erreur sur la page appropriée en faisant un:

 if (req.param("error" == 1)) { // do stuff bassed off that error match }; 

vous pouvez coder en dur dans plusieurs valeurs d’erreur différentes et le faire répondre correctement en fonction de l’erreur survenue

Notez que cela rend votre page Web susceptible de manipulation, car les utilisateurs peuvent saisir leurs propres parameters et obtenir que votre page y réponde. Assurez-vous donc que l’action que vous entreprenez ne soit pas quelque chose que vous ne voudriez pas que des gens abusent. (Devrait être bon pour l’affichage d’erreur simple)

Vous devez append un paramètre de page au formulaire. Ensuite, vous pouvez le lire sur le serveur et l’utiliser pour la redirection.

 res.redirect(page, {reg_error:'username'}) // page being the url to redirect to.