Express中的服务器端验证与单页Angular应用程序兼容

时间:2014-05-13 19:25:45

标签: javascript node.js angularjs validation express

我想执行服务器端验证,最好使用expressValidator。保存资源时,我会检查它是否有效。如果它无效我应该返回什么?

有例子: http://blog.ijasoneverett.com/2013/04/form-validation-in-node-js-with-express-validator/

https://github.com/ctavan/express-validator

不幸的是,我无法从中找出答案。

在Angular中,我使用的是$ resource服务。当我进行保存并且存在验证错误时,服务器应如何发送回来?请注意,这是一个单页面应用程序。

另外,我应该如何处理客户端?这在技术上是否成功?

请,我不是在寻找任何即时,ajax,检查每个字段的解决方案。我想提交save,如果有问题,我想返回错误,以便Angular可以处理它们。这不一定是完美的解决方案,只是让我走上正轨。

我目前没有以特殊的方式处理Angular代码: 控制器:

$scope.saveTransaction = function (transaction) {
   transactionData.saveTransaction(transaction);
}

服务

saveTransaction: function(transaction) {
  return resource.save(transaction);
}

服务器端代码如下所示:

app.post('/api/transactions', function (req, res) {
    var transaction; 

    req.assert('amount', 'Enter an amount (numbers only with 2 decimal places, e.g. 25.50)').regex(/^\d+(\.\d{2})?$/);

    var errors = req.validationErrors();
    var mapped = req.validationErrors(true);
    if (mapped) {console.log("MAPPED")};
    //console.log(mapped);

    if(!errors) {

        console.log("Passed");

        transaction = new TransactionModel({
            date: req.body.date,
            description: req.body.description,
            amount: req.body.amount
        });

        transaction.save(function (err) {
            if (!err) {
                return console.log("created");
            } else {
                return console.log("err");

            }
            return res.send(transaction);
        })
    }
    else {

        console.log("Errors");
        res.send(errors);
//        res.render('Transaction', {
//            title: 'Invalid Transaction',
//            message: '',
//            errors: errors
//        });

    }

});

1 个答案:

答案 0 :(得分:1)

你可以发送和处理" 更好"错误:

SERVER

res.json(500, errors)

客户端

resource.save(tran).then(function(){
  //it worked
},
function(response) {
  //it did not work...
  //see response.data
});