简体   繁体   English

Node.js Express res.redirect不起作用

[英]Node.js express res.redirect not working

I am currently programming an application which requires user authentication. 我目前正在编写一个需要用户身份验证的应用程序。 When you log in to the application the Node server should redirect the user to the main page. 当您登录到应用程序时,节点服务器应将用户重定向到主页。 Unfortunately, I am facing issues when trying to do that. 不幸的是,我在尝试这样做时遇到了问题。

Here is my code in Node.js: 这是我在Node.js中的代码:

 //import necessary modules var path = require("path"); var http = require("http"); var express = require("express"); var session = require("express-session"); var port = 8080; var app = express(); var conString = "postgres://postgres:admin@localhost:5432/db_invoice_kuga"; /** * Middleware components. * The session middleware is used to create sessions for * user authentication. * The static middleware is used to serve * the static file in the frontend folder. */ //use sessions for authentication app.use(session({ secret: "2C44-4D44-WppQ38S", resave: true, saveUninitialized: true })); //check authentication app.use(function(req, res, next) { if(req.session && req.session.user) { next(); } else { if(req.url.indexOf("/login/") === -1 && req.url.indexOf("/loginPage") === -1) { res.redirect("/loginPage"); } else { next(); } } }); //static middleware app.use(express.static(__dirname + "/frontend")); /** * Routes define the endpoints for the application. * There is a specific file for customer routes, invoice routes, ... */ //include routes require("./routes/routesCustomer.js")(app, conString); //login and logout routes app.get("/loginPage", function(req, res) { res.sendFile(path.join(__dirname, "frontend", "login.html")); }); app.get("/", function(req, res) { res.sendFile(path.join(__dirname, "frontend", "index.html")); }); /** * Logs the user in. * @name /login/:username/:password * @param username (obligatory) * @param password (obligatory) */ app.get("/login/:username/:password", function(req, res) { var username = req.params.username; var password = req.params.password; if(username === "Daniel" && password === "test") { req.session.user = "Daniel"; res.redirect("/"); } else { res.status(400).json({ "loggedin": false }); } }); /** * Logs the user out. * @name /logout */ app.get("/logout", function(req, res) { req.session.destroy(); res.redirect("/loginPage"); }); /** * Bind the server to the port and * start the application. */ //create the server and bind it to the port http.createServer(app).listen(port, function() { console.log("Server listening on port " + port); }); 

My problem is the route "/login/:username/:password". 我的问题是路由“ / login /:用户名/:密码”。 There the "res.redirect('/')" is not working. 那里“ res.redirect('/')”不起作用。 Although redirect() works just fine in the other routes... 虽然redirect()在其他路由中也能正常工作...

Does anybody have an idea what could be wrong? 有人知道什么地方可能出问题吗? Maybe there is also a better way to do user authentication. 也许还有更好的方法来进行用户身份验证。 I would appreciate suggestions :) 我将不胜感激建议:)

Thank you very much in advance. 提前非常感谢您。 Daniel 丹尼尔

This is how my code looks like now: 这是我的代码现在的样子:

 /** * Created by Daniel on 27.07.2016. * This file contains the setup of the server. */ "use strict"; //import necessary modules var path = require("path"); var http = require("http"); var colors = require("colors"); var express = require("express"); var stormpath = require("express-stormpath"); var app = express(); var port = 8080; var conString = "postgres://postgres:admin@localhost:5432/db_invoice_kuga"; console.log("\\nSETTING UP THE SERVER...\\n" + "========================\\n"); //MIDDLEWARE //log routes app.use(function(req, res, next) { console.log(colors.yellow(req.method + "\\t" + req.url)); next(); }); //configure stormpath app.use(stormpath.init(app, { client: { apiKey: { file: "./apiKey.properties" } }, web: { login: { enabled: true }, logout: { enabled: true }, me: { enabled: false }, oauth2: { enabled: false }, register: { enabled: false } }, application: { href: "https://api.stormpath.com/v1/applications/onkfEfUjnUWO6qMg4y5J7", } })); //serve static files in frontend folder app.use(stormpath.loginRequired, express.static(__dirname + "/frontend")); //ROUTES //include routes console.log("Including routes..."); require("./routes/routesCustomer.js")(app, conString); console.log(colors.green("Success.\\n")); //BIND APP TO PORT //create the server and bind app to the port console.log("Binding application to port..."); http.createServer(app).listen(port, function() { console.log(colors.green("Success. Magic happens on port " + port + "!")); }); app.on("stormpath.ready", function() { console.log(colors.green("Stormpath ready!\\n")); console.log(colors.cyan(">> Application ready <<\\n")); console.log(colors.magenta("Requests:\\n=========\\n")); }); 

login/logout routes are automatically added to the application when using express-stormpath. 使用express-stormpath时,登录/注销路由会自动添加到应用程序中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM