簡體   English   中英

Node.js Express res.redirect不起作用

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

我目前正在編寫一個需要用戶身份驗證的應用程序。 當您登錄到應用程序時,節點服務器應將用戶重定向到主頁。 不幸的是,我在嘗試這樣做時遇到了問題。

這是我在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); }); 

我的問題是路由“ / login /:用戶名/:密碼”。 那里“ res.redirect('/')”不起作用。 雖然redirect()在其他路由中也能正常工作...

有人知道什么地方可能出問題嗎? 也許還有更好的方法來進行用戶身份驗證。 我將不勝感激建議:)

提前非常感謝您。 丹尼爾

這是我的代碼現在的樣子:

 /** * 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")); }); 

使用express-stormpath時,登錄/注銷路由會自動添加到應用程序中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM