Comment rediriger vers une autre page dans le noeud.js

j'ai un login et une page d'inscription. Quand random user veut se connecter, et se connecter est réussie, je veux le rediriger vers un autre .page ejs (par exemple UserHomePage.ejs), cependant, 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 sur le bouton cliquer.

disons que je suis sur la page display user, où j'affiche tous mes utilisateurs, puis il y a"add another used button". Comment dois-je faire? Comment puis-je rediriger l'utilisateur vers Inscrire.js page 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>
12
demandé sur Scath 2016-04-05 22:06:49

6 réponses

Vous devez retourner la ligne qui redirige

return res.redirect('/UserHomePage');
27
répondu Rob Brander 2016-04-05 19:17:35

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 la création de fichiers comme app.js de manière automatique. Mon connexion.html ressemble:

...
<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>

l'important ici est action=" / login". C'est le chemin que j'utilise dans mon index.js (pour naviguer entre les vues) qui ressemblent 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 y a un tutoriel utile que vous pouvez vérifier pour la redirection entre les pages:

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

Pour lire une déclaration <%= user.attributs.name %> jetons un coup d'oeil à un simple profil.html a la suivante structure:

<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 l' utilisateur variable, vous devez initialiser un utilisateur variable dans votre gamme.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 mongoose 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 n'importe quand pour d'autres questions... Meilleures salutations, Nazar

4
répondu Nazar Medeiros 2016-04-06 18:54:55

si l'utilisateur réussit à se connecter à votre application Node, je pense que vous utilisez Express, n'est-ce pas ? Eh bien, vous pouvez rediriger facile en utilisant res.redirect. Comme:

app.post('/auth', function(req, res) {
  // Your logic and then redirect
  res.redirect('/user_profile');
});
1
répondu Eduardo Pereira 2016-04-05 19:12:54

la déclaration If else doit être enveloppée dans un .obtenir ou une .post pour la redirection.

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

ou

app.get('/login', function(req, res) {
});
1
répondu jmona789 2016-04-05 19:18:50

@Nazar Medeiros-votre solution utilise passeport avec Express. Je n'utilise pas le passeport, juste l'express-jwt. Je fais peut-être quelque chose de mal, mais quand un utilisateur se connecte, le token doit retourner du côté du client. D'après ce que j'ai trouvé jusqu'à présent, cela signifie que nous devons retourner un json avec le token et ne pouvons donc pas appeler redirect. Est-il quelque chose que je suis absent?

pour contourner cela, je rends simplement le token, je le stocke dans mes cookies et puis je fais une demande ajax GET (avec le jeton valide). Quand cet appel ajax retourne, je remplace le html du corps par le HTML retourné. Ce n'est probablement pas la bonne façon de le faire, mais je ne peux pas trouver une meilleure façon. 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
répondu ajpieri 2017-11-12 04:59:14

dans un autre sens, vous pouvez utiliser window.location.href="your URL"

e.g.:

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

ou:

return res.redirect("your url");
1
répondu BittuS 2018-01-17 18:20:40