可以'不要在express/angular应用程序上提交表格
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;
}
handlesignup
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");
}
})
}
Angular
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);
});
}
相关文章:
- angular 1.5应用程序中的导航栏
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 没有在Angular应用程序中定义firebase(在firebase迁移之后)
- Grunt构建导致Angular应用程序在dist上崩溃
- 在Angular应用程序中每个帖子投票一次
- 如何在angular.js中动态应用自定义过滤器
- 如何构建angular.js应用程序
- 微软边缘浏览器缓存中的RESTful Angular应用程序
- Angular ng控制器与ng应用程序冲突
- 如何在给定的angular应用程序中获取所有指令名称
- 在将绑定应用于控制器之后,是否会发出Angular$scope事件
- 使用应用程序状态js和视图在angular js url上传递两个参数
- 如何将现有的angular js应用程序集成到Laravel 5中
- 从C#应用程序向Angular页面发送帖子请求
- angular js应用程序不工作
- 我可以在React应用程序中使用什么作为Angular的等价物;s$http.get
- 在输入后,有条件地应用Angular中的两个类之一
- 对翻译后的句子应用Angular-JS过滤器
- 对一组元素应用angular指令
- 单页应用(Angular)的PayPal上下文结帐