我正试图从服务器到客户端获得“成功”或“失败”响应。服务器在express框架中的node.js和angularjs中的客户端实现。
这是服务器端node.js部分:
connection.connect();
/* GET home page. */
router.get('/', function(req, res, next) {
res.sendFile(path.join(__dirname, '../', 'views', 'login.html'));
});
router.get('/login', function(req,res)
{
console.log("Username:"+req.query.username);
console.log("Password:"+req.query.password);
var user = req.query.username;
var pass = req.query.password
connection.query("select * from user where login_name = ?", user, function(err, rows, fields) {
if (!err){
if(user==rows[0].login_name && pass==rows[0].pass){
console.log("success");
res.json({status: 200});
}
}
else
console.log('Error while performing Query.', err);
});
这里是angularjs部分:
<form name="login">
<div class="login" ng-app="loginPage" ng-controller="loginController">
<input type="text" placeholder="username" ng-model="uname" name="userid"><br>
<input type="password" placeholder="password" ng-model="pword" name="pswrd"><br>
<!--<input type="button" ng-click="login();" onclick="check(this.form)" value="Login"/>-->
<button ng-click="login();">Login</button>
</div>
</form>
<script language="javascript">
var app = angular.module('loginPage', []);
app.controller('loginController', function($scope, $http) {
console.log("inside controller");
$scope.login = function() {
console.log("inside the login function");
console.log($scope.uname);
var verify = $http({
method: 'GET',
url: '/login' +
'',
params: { username: $scope.uname, password: $scope.pword }
}).then(
function successful(response) {
$scope.theResponse = response.data;
window.open("./team_list.html")
}, function unsuccessful(response) {
alert('Wrong username/password.');
$scope.theResponse = response.data;
});
}
})
</script>
我尝试在浏览器的登录页面上输入用户名的“test”和pw的“test”,因为这是我在sql数据库中输入的内容。具体来说,我不确定为什么登录页面没有链接到我已指定路径的team_list页面。
我不确定为什么它不起作用。如果我应该以不同的方式使用json,我会感激更多帮助,因为我对它不太熟悉。
答案 0 :(得分:0)
NodeJS端的路由顺序错误。 /login
应该是第一位的。其他一切都将由'/'
路线提供。
router.get('/login', function(req, res) {
console.log("Username:" + req.query.username);
console.log("Password:" + req.query.password);
var user = req.query.username;
var pass = req.query.password
connection.query("select * from user where login_name = ?", user, function(err, rows, fields) {
if (!err) {
if (user == rows[0].login_name && pass == rows[0].pass) {
console.log("success");
res.json({
status: 200
});
}
} else
console.log('Error while performing Query.', err);
});
/* GET home page. */
router.get('/', function(req, res, next) {
res.sendFile(path.join(__dirname, '../', 'views', 'login.html'));
});
答案 1 :(得分:0)
检查您的控制台,您甚至可以从那里找出问题。 控制台的快捷方式
答案 2 :(得分:0)
这样做:
connection.query("select * from user where login_name = ?", user, function(err, rows, fields) {
if (!err){
if(user==rows[0].login_name && pass==rows[0].pass){
console.log("success");
res.send(200);
}
}
else{
console.log('Error while performing Query.', err);
res.send(401);
}
});
实际上,您应该发送错误或成功代码,例如200或401。
并使用
res.send(ErrorCode)
或res.sendStatus(ErrorCode)
,它会在客户端为您自动执行,如下所示:
<script language="javascript">
var app = angular.module('loginPage', []);
app.controller('loginController', function($scope, $http, $window) {
console.log("inside controller");
$scope.login = function() {
console.log("inside the login function");
console.log($scope.uname);
$http.get('/login').then(function (success) {
$window.alert('Success');
}, function (error) {
$window.alert('Wrong username/password.');
});
}
});
</script>