使用$ resource

时间:2016-11-22 20:11:46

标签: angularjs node.js angular-resource

我正在与MEAN合作开展一个小项目,以便开始使用它。我一直在关注thinkster.io的教程(我做了一些小修改),到目前为止我已经取得了很好的成绩。我已经用Postman测试了API路线,一切正常。问题是,出于某种原因(请记住我是NodeJS的新手),它只接受Content-type: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()})
    });
});

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

1 个答案:

答案 0 :(得分:1)

您应该在string;#121 - Vacation schedules are conflicting 方法的第一个参数(将通过请求user)中传递save数据,然后您可以放置​​body& successCallback

errorCallback

结帐this article