2016-06-19 4 views
0

Also mache ich eine Node.js-Webanwendung, in der ich den Benutzer nach der Verbindung mit einer Datenbank anmelde. Ich benutze Express js und langweilig für die App und Datenbank Teil. Während also die Schnittstelle mit der Datenbank perfekt ist und ich auch Sitzungsvariablen setzen kann, kann ich den Benutzer nicht umleiten. Meine Web-App ist eine einseitige App, die nach dem Einloggen neu geladen werden soll, was nicht geschieht. Ich verwende ejs als meine Template-Engine. Beim Klicken auf die Login-Schaltfläche passiert nichts und die Adressleiste zeigt http://localhost:1337/? anstelle von http://localhost:1337/. Jede Hilfe würde sehr geschätzt werden! Vielen Dank!Der Browser kann nach der Anmeldung in Node.js nicht umgeleitet werden

app.js - nur ein subpart

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

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

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

Antwort

1

gefunden einige Besonderheiten in Ihrem Code

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

Also, das ist nicht der Weg für eine Umleitung. Sie müssen von der Client-Seite (zum Beispiel) die URL umleiten: yourapp/yourpath, wenn yourpath der Weg ist, dass Sie eine Route in Ihrem Knoten/Express-Anwendung erstellen werden:

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

Also sagen Sie, dass Die Umleitung sollte sowohl vom Server als auch vom Client erfolgen. Wenn ich sage, dass ich Ajax verwende, um mit meiner node.js Datei zu interagieren, dann sollte die URL lauten: 'myappname/mypath' sowie eine Umleitung in meinem node.js Code? Danke nochmal für die Hilfe! Ich bin neu bei node.js, also könnte das alles albern erscheinen. –

Verwandte Themen