【发布时间】:2022-04-07 13:40:14
【问题描述】:
我有两种方法:
validateRegistration(),调用app.get('/users/:email', todo)
login(),调用app.get('/users/:username', todo)
validateRegistration() 工作正常,但是当 login() 被调用时,它返回 null,但是如果我在 server.js 中注释掉 app.get('/users/:email', todo),login() 返回预期的反应。似乎两者在 server.js 中不能同时存在
见下方相关代码
registerPage.html
<div class="container" ng-show="show">
<form name="registerForm" novalidate>
<h2>Registration</h2>
<span>All fields required</span>
<br>
<br>
<label>First Name</label>
<br>
<input class="form-control" type="text" ng-model="user.fName" name="fName" required placeholder="First Name">
<div ng-messages="registerForm.fName.$error">
<div class="errorMsg" ng-message="required">Required</div>
</div>
<br>
<label>Last Name</label>
<input class="form-control" type="text" ng-model="user.lName" name="lName" required placeholder="Last Name">
<div ng-messages="registerForm.lName.$error">
<div class="errorMsg" ng-message="required">Required</div>
</div>
<br>
<label>Email</label>
<input class="form-control" ng-model="user.email" ng-change="validateEmail(user.email)" type="email" name="emailAdd" required placeholder="Email">
<span class="errorMsg">{{emailExistsMsg}}</span>
<div ng-messages="registerForm.emailAdd.$error">
<div class="errorMsg" ng-message="email">Invalid email address</div>
<div class="errorMsg" ng-message="required">Required</div>
</div>
<br>
<label>Username</label>
<input class="form-control" ng-model="user.username" ng-change="validateUsername(user.username)" type="text" name="uName" required placeholder="Username">
<span class="errorMsg">{{usernameExistsMsg}}</span>
<div ng-messages="registerForm.uName.$error">
<div class="errorMsg" ng-message="required">Required</div>
</div>
<br>
<label>Password</label>
<input class="form-control" ng-minlength="6" type="password" ng-model="user.password" name="password" required placeholder="Password">
<div ng-messages="registerForm.password.$error">
<div class="errorMsg" ng-message="minlength">Password should be 6 character minimum</div>
<div class="errorMsg" ng-message="required">Required</div>
</div>
<br>
<button class="btn btn-info" ng-click="addUser(user)" ng-disabled="registerForm.$invalid">Register</button>
<br>
<br>
<a href="#/signIn">Already registered?......<strong>Log In</strong></a>
</form>
</div>
registerController.js
myApp.controller('RegisterController', ['$scope', '$http', '$location', function($scope, $http, $location) {
console.log("Register controller");
$scope.addUser = function(user) {
console.log("Add user called");
$http.post('/users', {fname: user.fName, lname: user.lName, email: user.email, username: user.username, password: user.password}).success(function(response) {
console.log("Add user response username: " + response.username);
});
this.validateRegistration(user.email);
};
$scope.validateEmail = function(email) {
console.log("Validate email called");
$http.get('/users/' + email).success(function(response) {
if(response != null) {
$scope.emailExistsMsg = response.email + " already exists";
} else {
$scope.emailExistsMsg = "";
}
});
};
$scope.validateRegistration = function(email) {
$http.get('/users/' + email).success(function(response) {
if(response != null) {
console.log("Registration successful");
$scope.registrationMsg = "Congratulations " + email + ". Registration successful";
console.log($scope.registrationMsg);
$location.path("/registrationStatus");
} else {
console.log("Registration not successful: " + response);
$scope.registrationMsg = "Error with registration. Please try again or contact administrator.";
console.log($scope.registrationMsg);
$location.path("/registrationStatus");
}
});
};
}]);
signinPage.html
<div class="container" ng-show="show">
<br>
<form name="signInForm" novalidate>
<h2>Sign In</h2>
<br>
<label>Username</label>
<input class="form-control" ng-model="user.username" type="text" name="username" required placeholder="Username">
<br>
<label>Password</label>
<input class="form-control" ng-model="user.password" type="password" name="password" required placeholder="Password">
<br>
<button class="btn btn-info" ng-click="logIn(user.username, user.password)" ng-disabled="signInForm.$invalid">Sign In</button>
<br>
<br>
<a href="#/register">Not registered?......<strong>Register</strong></a>
</form>
</div>
signinController.js
myApp.controller('SignInController', ['$scope', '$http', '$location', function($scope, $http, $location) {
console.log("Sign in controller");
$scope.logIn = function(username, password) {
console.log("Sign in called");
$http.get('/users/' + username).success(function(response) {
if(response != null) {
if(username == response.username && password == response.password) {
console.log("Successful log in");
this.isDisabled = false;
$location.path("/playSet");
}
} else {
console.log("User not found: " + response);
}
});
};
}]);
server.js
var express = require('express');
var app = express();
var mongojs = require('mongojs');
var db = mongojs('tracks', ['tracks']);
var db1 = mongojs('setlist', ['setlist']);
var db2 = mongojs('users', ['users']);
var bodyParser = require('body-parser');
app.use(express.static(__dirname = '\public'));
app.use(bodyParser.json());
app.get('/users/:email', function(req, res) {
var email = req.params.email;
console.log("Existing email validation: " + email);
db2.users.findOne({email: email}, function(err, doc) {
res.json(doc);
});
});
app.get('/users/:username', function(req, res) {
var username = req.params.username;
console.log("User: " + username);
db2.users.findOne({username: username}, function(err, doc) {
res.json(doc);
});
});
app.listen(3000);
console.log("Server running on port 3000");
【问题讨论】: