在AngularJS中回调$ save方法

时间:2014-03-15 19:32:17

标签: node.js angularjs recaptcha

我正在寻找在angularjs中使用$save方法的回调。

我正在向node.js后端发送一篇博文,并通过recaptcha验证。

$resource文档中执行操作无效:

非GET实例操作:实例。$ action([参数],[成功],[错误])

var post = new Posts({
            title: this.title,
            content: this.content,
            response: this.model.captcha.response,
            challenge: this.model.captcha.challenge
         });

post.$save({}, 
     function(addedpost) {
         $location.path('posts/' + addedpost._id);
    }, function(error) {
         console.log(error);
         vcRecaptchaService.reload();
    });

在服务器中,我使用node {js的simple_recaptcha模块来验证请求中打包的recaptcha质询和响应。

var verifyRecaptcha = function(req,res,next){
    var privateKey = 'XXXXXXXXXXXXXXXXXXXXXXXX';
    var ip = req.ip;
    var challenge = req.body.challenge;
    var response = req.body.response;
    simple_recaptcha(privateKey, ip, challenge, response, function(err) {
        if(err) return res.send(401,err.message);
        console.log('Recaptcha verified!');
    });
    next();
};

因此,当验证码正确时,它应该继续并将帖子添加到数据库,否则,后端响应401,前端角度js应该将此识别为错误并刷新重新接收。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

有时我也会在AngularJS的(通常非常好的)文档中迷路。 就我而言,我在这里找到了一个解决方案:how-to-add-call-back-for-resource-methods-in-angularjs

您可以让服务器在POST上完成工作并分析响应,例如:

    post.$save(
        function(data){
            console.log(JSON.stringify(data));
            if(data.error_message){
                 // ... error_message comes from the server
            } else {
                // ...
            }
        }
    );