web-dev-qa-db-fra.com

Comment rediriger vers une autre page dans node.js

J'ai un identifiant et une page d'inscription. Lorsqu'un utilisateur aléatoire souhaite se connecter et que celui-ci aboutit, je souhaite le rediriger vers une autre page .ejs (par exemple, UserHomePage.ejs). Toutefois, rien de ce que j'ai essayé n'a fonctionné jusqu'à présent.

if (loggedIn)
    {
        console.log("Success!");
        res.redirect('/UserHomePage');
    }
    else
    {
        console.log("Error!");
    }

Je voudrais aussi savoir comment rediriger un utilisateur en cliquant sur un bouton.

Disons que je suis sur la page utilisateur d'affichage, où j'affiche tous mes utilisateurs, puis il y a "ajouter un autre bouton utilisé". Comment je fais ça? Comment rediriger l'utilisateur vers la page Register.js après onclick?

<h2>List of users</h2>
<ul>
<% uporabniki.forEach(function(user) { %>
<li>  
  <%= user.attributes.name %>
  <%= user.attributes.last name %>
</li>
<% }); %>
</ul>
<h3>Add another user</h3>
<form method="post">
 <input type="submit" value="Add user" />
</form>
13
aiden87

Vous devriez retourner la ligne qui redirige

return res.redirect('/UserHomePage');
35
Rob Brander

Ok, je vais essayer de vous aider en utilisant un de mes exemples. Tout d'abord, vous devez savoir que j'utilise express pour la structure de mon répertoire d'application et pour créer des fichiers tels que app.js de manière automatique. Mon login.html se présente comme suit:

...
<div class="form">
<h2>Login information</h2>
<form action="/login" method = "post">
  <input type="text" placeholder="E-Mail" name="email" required/>
  <input type="password" placeholder="Password" name="password" required/>
  <button>Login</button>
</form>

La chose importante ici est action = "/ login". Voici le chemin que j'utilise dans mon index.js (pour naviguer entre les vues) et qui ressemble à ceci:

app.post('/login', passport.authenticate('login', {
    successRedirect : '/home', 
    failureRedirect : '/login', 
    failureFlash : true
}));

app.get('/home', function(request, response) {
        response.render('pages/home');
});

Cela me permet de rediriger vers une autre page après une connexion réussie. Il existe un tutoriel utile que vous pouvez consulter pour rediriger les pages:

http://cwbuecheler.com/web/tutorials/2014/restful-web-app-node-express-mongodb/

Pour lire une instruction comme <% = user.attributes.name%>, jetons un coup d'œil à un simple profile.html qui présente la structure suivante:

<div id = "profile">
<h3>Profilinformationen</h3>
    <form>
        <fieldset>
            <label id = "usernameLabel">Username:</label>
            <input type = "text" id="usernameText" value = "<%= user.user.username %>" />
            <br>
        </fieldset>
    </form>

Pour obtenir les attributs de la variable user, vous devez initialiser une variable user dans votre fichier routing.js (appelé index.js dans mon cas). Cela ressemble à

app.get('/profile', auth, function(request, response) {
    response.render('pages/profile', {
        user : request.user
    });
});

J'utilise la mangouste pour mon modèle d'objet:

var mongoose = require('mongoose');
var bcrypt   = require('bcrypt-nodejs');
var role     = require('./role');

var userSchema = mongoose.Schema({
    user             : {
        username     : String,
        email        : String,
        password     : String
    }
});

Demandez-moi à tout moment pour d'autres questions ... Cordialement, Nazar

4
Nazar Medeiros

Si l'utilisateur s'est connecté avec succès à votre application Node, je pense que vous utilisez Express, n'est-ce pas? Eh bien, vous pouvez rediriger facilement en utilisant res.redirect. Comme:

app.post('/auth', function(req, res) {
  // Your logic and then redirect
  res.redirect('/user_profile');
});
2
Eduardo Pereira

D'une autre manière, vous pouvez utiliser window.location.href="your URL"

par exemple.:

res.send('<script>window.location.href="your URL";</script>');

ou:

return res.redirect("your url");
1
BittuS

@ Nazar Medeiros - Votre solution utilise un passeport avec Express. Je n'utilise pas de passeport, juste express-jwt. Il se peut que je fasse quelque chose de mal, mais lorsqu'un utilisateur se connecte, le jeton doit revenir du côté client. D'après ce que j'ai trouvé jusqu'à présent, cela signifie que nous devons renvoyer un JSON avec le jeton et que, par conséquent, ne peut pas appeler redirection. Y a-t-il quelque chose qui me manque ici? 

Pour résoudre ce problème, je retourne simplement le jeton, le stocke dans mes cookies, puis effectue une demande GET ajax (avec le jeton valide). Lorsque cet appel ajax retourne, je remplace le code HTML du corps par le code HTML renvoyé. Ce n'est probablement pas la bonne façon de le faire, mais je ne peux pas trouver un meilleur moyen. Voici mon code JavaScript JQuery.

function loginUser(){
  $.post("/users/login", {
    username: $( '#login_input_username' ).val(),
   password: $( '#login_input_password' ).val()
 }).done(function(res){
    document.cookie = "token = " + res.token;
    redirectToHome();
  })
}

function redirectToHome(){
  var settings = {
    "async": true,
    "crossDomain": true,
    "url": "/home",
    "type": "GET",
    "headers": {
      "authorization": "Bearer " + getCookie('token'),
      "cache-control": "no-cache"
    }
  }

  $.ajax(settings).done(function (response) {
    $('body').replaceWith(response);
  });
}

function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}
1
ajpieri

L'instruction If else doit être encapsulée dans un .get ou un .post à rediriger. Tel que 

app.post('/login', function(req, res) {
});

ou

app.get('/login', function(req, res) {
});
1
jmona789