如何重定向到node.js中的另一个页面

时间:2016-04-05 19:06:49

标签: javascript node.js redirect express ejs

我有登录和注册页面。当随机用户想要登录并且登录成功时,我想将他重定向到另一个.ejs页面(例如UserHomePage.ejs),但是,到目前为止,我没有尝试过任何工作。

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

我还想知道如何在点击按钮时重定向用户。

让我们说我在显示用户页面上,我显示了所有用户,然后有"添加另一个用过的按钮"。我怎么做?如何在onclick后将用户重定向到Register.js页面?

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

6 个答案:

答案 0 :(得分:39)

您应该返回重定向的行

return res.redirect('/UserHomePage');

答案 1 :(得分:4)

好的,我会尽力帮助你使用我的一个例子。首先,您需要知道我正在使用 express 作为我的应用程序目录结构以及以自动方式创建 app.js 等文件。我的 login.html 如下所示:

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

重要的是 action =“/ login”。这是我在 index.js 中使用的路径(用于在视图之间导航),如下所示:

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

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

这使我可以在成功登录后重定向到另一个页面。有一个有用的教程,您可以检查页面之间的重定向:

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

要阅读&lt;%= user.attributes.name%&gt; 等语句,让我们看一下简单的 profile.html ,它具有以下结构:

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

要获取用户变量的属性,您必须在routing.js中初始化用户变量(在我的情况下称为index.js)。这看起来像

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

我正在使用mongoose作为我的对象模型:

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

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

随时向我询问更多问题...... 最好的祝福, 纳扎尔

答案 2 :(得分:2)

如果用户成功登录您的Node应用程序,我认为您使用的是Express,不是吗?那么你可以使用res.redirect轻松重定向。像:

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

答案 3 :(得分:1)

If else语句需要包装在.get或.post中以进行重定向。如

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

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

答案 4 :(得分:1)

@Nazar Medeiros - 您的解决方案使用Express和Express。我没有使用护照,只是快递jwt。我可能做错了,但是当用户登录时,令牌需要返回到客户端。从我到目前为止发现的,这意味着我们必须返回带有令牌的json,因此不能调用重定向。那里有什么我想念的吗?

为了解决这个问题,我只需返回令牌,将其存储在我的cookie中,然后发出ajax GET请求(带有效令牌)。当该ajax调用返回时,我用返回的HTML替换正文的html。这可能不是正确的方法,但我找不到更好的方法。这是我的JQuery JavaScript代码。

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 "";
}

答案 5 :(得分:1)

另一方面,您可以使用window.location.href="your URL"

e.g:

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

或:

return res.redirect("your url");