如何redirect到node.js中的另一个页面

我有一个login和注册页面。 当随机用户想要login,并login成功,我想redirect他到另一个.ejs页面(例如UserHomePage.ejs),但是,我已经尝试过没有任何工作到目前为止。

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

我也想知道,如何redirect用户点击button。

让我们说在即时通讯显示用户页面,我显示所有的用户,然后有“添加另一个使用的button”。 我怎么做? 如何在onclick后将用户redirect到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> 

非常感谢你!

您应该返回redirect的行

 return res.redirect('/UserHomePage'); 

好吧,我会尽量帮助你使用我的例子。 首先,您需要知道我正在使用express来处理我的应用程序目录结构,并以自动方式创build像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中使用的path(用于浏览视图之间),看起来像这样:

 app.post('/login', passport.authenticate('login', { successRedirect : '/home', failureRedirect : '/login', failureFlash : true })); app.get('/home', function(request, response) { response.render('pages/home'); }); 

这使我可以在成功login后redirect到另一个页面。 有一个有用的教程,你可以检查出redirect页面之间:

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

要阅读像<%= user.attributes.name%>这样的语句,我们来看看一个简单的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> 

为了得到用户variables的属性,你必须在你的routing.js中初始化一个用户variables(在我的情况下称为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 } }); 

随时问我更多的问题…最好的问候,纳扎尔

如果用户成功login到你的Node应用程序,我在想你是使用Express,不是吗? 那么你可以使用res.redirect轻松redirect。 喜欢:

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

If else语句需要封装在.get或.post中以redirect。 如

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

要么

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

@Nazar Medeiros – 您的解决scheme使用Express的护照。 我没有使用护照,只是expressionjwt。 我可能做错了,但是当用户login时,令牌需要返回到客户端。 从目前为止我发现,这意味着我们必须返回一个JSON与令牌,因此不能调用redirect。 有什么我在那里失踪?

为了解决这个问题,我只需返回令牌,将其存储在我的cookie中,然后发出一个ajax GET请求(使用有效的令牌)。 当这个Ajax调用返回时,我用正在返回的HTMLreplace正文的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 ""; }