所以我正在制作一个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>
答案 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('/')
});