[英]can't submit a form on express/angular app
在我的程序中有一個驗證功能,如果有錯誤,它將阻止表單提交並顯示錯誤消息,否則它將console.log("Success")
但是即使沒有任何錯誤,我的表單也無法提交。 沒有錯誤時,是否有啟用狀態碼200
? 因為現在該表格由於狀態碼400
而使我無法提交
function validateSignup(data,callback) {
"use strict";
var USER_RE = /^[a-zA-Z0-9_-]{2,25}$/;
var PASS_RE = /^.{6,100}$/;
var EMAIL_RE = /^[\S]+@[\S]+\.[\S]+$/;
if (!USER_RE.test(data.publicUsername)) {
callback(new Error('Invalid Public Username try just letters and numbers, e.g: Ed, 69, Kelvin and etc'), null);
}
if (!PASS_RE.test(data.password)) {
callback(new Error('Password must be at least 6 characters long'), null);
}
if (data.password != data.confirmPassword) {
callback(new Error('Password must match'), null);
}
if (!EMAIL_RE.test(data.email)) {
callback(new Error('Invalid email address'), null);
}
if (data.email != data.confirmEmail) {
callback(new Error('Email must match'), null);
}
return true;
}
處理注冊
this.handleSignup = function(req, res, next) {
"use strict";
validateSignup(req.body, function(error, data) {
if(error) {
res.send(400, error.message);
} else {
console.log("success");
}
})
}
function RegisterCtrl($scope, $http, $location) {
$scope.form = {};
$scope.errorMessage = '';
$scope.submitPost = function() {
$http.post('/register', $scope.form).
success(function(data) {
$location.path('/');
}).error(function(err) {
$scope.errorMessage = err;
});
};
}
您的代碼中有多個問題。
您的validateSignup
函數並不總是調用其回調。 如果輸入通過驗證,則不應返回true
,而應調用其回調且沒有錯誤和數據:
function validateSignup(data,callback) { // ... callback(null, data); }
您並不總是回答客戶的要求:
validateSignup(req.body, function(error, data) { if(error) { res.send(400, error.message); } else { console.log("success"); res.send(200); } })
編輯:作為旁注,應該以異步方式調用回調(即,使用process.setImmediate
, process.nextTick
或setTimeout
),但是在您的特定情況下這不是問題,因為回調將始終被同步調用。 如有效JS條款67所述:
即使數據立即可用,也不要同步調用異步回調。
這就是為什么我的建議是始終異步調用回調,這將使您免於以后出現怪異的錯誤。 有許多原因導致您不應該這樣做,但最明顯的是您可以輕松地淘汰堆棧。
您可以按照以下方法延遲執行回調:
function validateSignup(data,callback) {
// ...
process.setImmediate(function() {
callback(null, data);
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.