Javascript can';t在express/angular应用程序上提交表格
在我的程序中有一个验证函数,如果有错误,它将阻止表单提交并显示错误消息,否则它将Javascript can';t在express/angular应用程序上提交表格,javascript,node.js,angularjs,express,Javascript,Node.js,Angularjs,Express,在我的程序中有一个验证函数,如果有错误,它将阻止表单提交并显示错误消息,否则它将console.log(“Success”)但即使没有任何错误,我的表单也无法提交。如果没有错误,是否仍可以启用状态代码200?因为现在表单阻止我提交,因为状态代码400 表达 handlesignup this.handleSignup = function(req, res, next) { "use strict"; validateSignup(req.body, function(e
console.log(“Success”)
但即使没有任何错误,我的表单也无法提交。如果没有错误,是否仍可以启用状态代码200
?因为现在表单阻止我提交,因为状态代码400
表达
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");
}
})
}
有棱角的
代码中存在多个问题
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项所述:
永远不要同步调用异步回调,即使数据立即可用
这就是为什么我的建议是始终异步调用回调,这将使您以后摆脱奇怪的bug。你不应该这么做的原因有很多,但最明显的是你很容易就把事情搞砸了
以下是延迟回调执行的方法:
function validateSignup(data,callback) {
// ...
process.setImmediate(function() {
callback(null, data);
});
}
但当我将其更改为200时,它可以重定向到location.path(“/”),但是当然没有验证功能嗨,你的答案是有效的!非常感谢您,介意详细介绍一下旁注或给我一个例子,我真的不明白,我如何使用setTimeout调用回调?我需要安装任何节点模块来执行process.setImmediate吗?因为我一直得到TypeError:Object#没有方法“setImmediate”,所以至少需要节点v0.10。另一种可能是使用
process.nextTick()
。
validateSignup(req.body, function(error, data) {
if(error) {
res.send(400, error.message);
} else {
console.log("success");
res.send(200);
}
})
function validateSignup(data,callback) {
// ...
process.setImmediate(function() {
callback(null, data);
});
}