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);
      });
    }