Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 使用$resource在transformRequest中未定义数据_Angularjs_Node.js_Angular Resource - Fatal编程技术网

Angularjs 使用$resource在transformRequest中未定义数据

Angularjs 使用$resource在transformRequest中未定义数据,angularjs,node.js,angular-resource,Angularjs,Node.js,Angular Resource,我正在和MEAN一起做一个小项目,以便开始它。我一直在关注thinkster.io上的教程(我做了一些小的修改),到目前为止,我已经取得了很好的效果。我已经和Postman一起测试了API路由,一切都正常。问题是,出于某种原因(请记住,我是NodeJS新手),它只接受内容类型为x-www-form-urlencoded的请求 我多次遇到的解决方案是更改$resource的options参数中的标题。这是我的密码 register: function(user){ var def

我正在和MEAN一起做一个小项目,以便开始它。我一直在关注thinkster.io上的教程(我做了一些小的修改),到目前为止,我已经取得了很好的效果。我已经和Postman一起测试了API路由,一切都正常。问题是,出于某种原因(请记住,我是NodeJS新手),它只接受内容类型为x-www-form-urlencoded的请求

我多次遇到的解决方案是更改$resource的options参数中的标题。这是我的密码

register: function(user){

        var deferred = $q.defer();
        var UserResource = $resource('/api/users/register', {}, {
            save: {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
                transformRequest: function (data, headersGetter) {
                    console.log(data); // data is undefined ??
                    var str = [];
                    for (var d in data)
                       str.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));

                    return str.join("&");
               }
            }
        });

        UserResource.save(function(user){
            this.saveToken(user.token);
            deferred.resolve(user);
        }, function(user){              
            deferred.reject(user);
        });
        return deferred.promise;
}
寄存器函数在角度服务上声明。问题是后端正在向我发送错误,因为req.body对象为空。这是因为transformRequest方法没有正确执行。进行一点调试后,我发现'data'参数未定义。 这是后端中的代码

router.post('/register', function(req, res, next){          
    if(!req.body.username || !req.body.password){
        console.log(req.body.username);
        return res.status(400).json({message: 'Por favor llene todos los campos'});
    }

    var user = new User();

    user.username = req.body.username;

    user.fullname = req.body.fullname;

    user.setPassword(req.body.password);

    user.save(function (err){
        if(err){ return next(err); }

        return res.json({token: user.generateJWT()})
    });
});

任何想法都将不胜感激。提前感谢

您应该在
保存
方法的第一个参数中传递
用户
数据(该参数将通过请求
正文
),然后您可以放置
成功回调
错误回调

UserResource.save(user, function(user){
    this.saveToken(user.token);
    deferred.resolve(user);
}, function(user){              
    deferred.reject(user);
});

签出

Oops!:)没有看到丢失的参数。这解决了丢失的数据。但是,现在没有定义方法saveToken(也在服务中声明)。这可能是因为我在回调中,使用“This”不再引用服务。我需要将从服务器返回的令牌保存到localstorage(这就是saveToken的作用)。关于如何执行此操作的任何建议。@hrivera,因为函数中的
this
不是您正在思考的this。。我强烈建议你通过“谢谢”,我会调查的