在Node.js中登录后无法让浏览器重定向

时间:2016-06-19 16:02:57

标签: javascript node.js express session-variables ejs

所以我正在制作一个Node.js网络应用程序,我在用数据库连接后登录用户。我正在使用快速js和乏味的应用程序和数据库部分。因此,虽然与数据库的接口是完美的,我也能够设置会话变量,我无法重定向用户。我的网络应用程序是一个单页应用程序,应该在登录后重新加载,这不会发生。我使用ejs作为我的模板引擎。点击登录按钮没有任何反应,地址栏显示http://localhost:1337/?而不是http://localhost:1337/。非常感谢任何帮助!谢谢!

app.js - 只有一个子部分

....
var express = require('express');
var cookieParser = require('cookie-parser');
var routes = require('./routes/index');
var login = require('./routes/login.js');
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use('/', routes);
app.use('/login', login);
....

login.js - 完整文件

var express = require('express');
var router = express.Router();
/* Make a user login */
router.post('/', function (req, res) {
   var Connection = require('tedious').Connection;
   var config = {
        /* configuration options */
    };
    var connection = new Connection(config);
    connection.on('connect', function (err) {
        // If no error, then good to proceed.  
        if (err) {
            console.log(err);
        }
        executeStatement();
    });
    var Request = require('tedious').Request;
    var TYPES = require('tedious').TYPES;
    function executeStatement() {
        sql = "SELECT * from Table WHERE Email = '" + req.body.email + "' and password= '" + req.body.password + "';";
        console.log(sql);
        request = new Request(sql, function (err , rowCount) {
            if (err) {
                console.log(err);
            }
        });
        request.on('row', function (columns) {
            columns.forEach(function (column) {
                console.log(column.metadata.colName + ":" + column.value)
                if (column.metadata.colName == "Email") {
                    req.session.email = column.value;
                    console.log(req.session.email);
                }
                else if (column.metadata.colName == "Name") {
                    req.session.name = column.value;
                    console.log(req.session.name);
                }
                else if (column.metadata.colName == "phoneNumber") {
                    req.session.phonenumber = column.value;
                    console.log(req.session.phonenumber);
                }
                else if (column.metadata.colName == "Address1") {
                    req.session.address1 = column.value;
                    console.log(req.session.address1);
                }
                else if (column.metadata.colName == "Address2") {
                    req.session.address2 = column.value;
                    console.log(req.session.address2);
                }
                else {
                    //Do Nothing - Just placeholder
                }
            });
        });
        request.on('doneProc' , function (rowCount, more, returnStatus, rows) {
            if (rowCount == 1) {
                res.redirect('/');//This doesnt redirect!
            }
            else {
                res.send("Loging Unsuccesful!");
            }
        });
        connection.execSql(request);
    }
});

module.exports = router;

index.ejs - 完整档案

<html>
<head>
    <title>Test</title>
</head>
<body>
    <% if(loggedin == 'true') {%>
        You are logged in! <br>
        Your details are:
        <%= email %><br>
        <%= name %><br>
        <%= phonenumber %><br>
        <%= address1 %><br>
        <%= address2 %><br>
        <button onclick="logout()">Logout </button>
    <% } else { %>
    <form>
        <label>Email</label>
        <input type="text" id="email">
        <label>Password</label>
        <input type="password" id="password">
        <button type="submit" onclick="login()">Login</button>
    </form>
    <% } %>
    <form>
        <label>Name</label>
        <input type="text" id="sname">
        <label>Email</label>
        <input type="text" id="semail">
        <label>Password</label>
        <input type="password" id="spassword">
        <label>Phone Number</label>
        <input type="text" id="sphonenumber">
        <label>Address 1</label>
        <input type="text" id="saddress1">
        <label>Address 2</label>
        <input type="text" id="saddress2">
        <button type="submit" onclick="signup()">Signup</button>
    </form>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
    <script src="javascripts/indx.js"></script>
</body>

1 个答案:

答案 0 :(得分:1)

我在你的代码中发现了一些特殊性

request.on('doneProc' , function (rowCount, more, returnStatus, rows) {
        if (rowCount == 1) {
            //res is NOT defined!
            res.redirect('/');//This doesnt redirect!
        }
        else {
            //res is NOT defined!
            res.send("Loging Unsuccesful!");
        }
    });

所以,这不是重定向的方式。当你的路径是你在节点/快速应用程序中创建路径的路径时,你必须从客户端重定向到(例如)url:yourapp / yourpath:

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