2016-11-22 24 views
1

我正在使用MEAN开展一个小型项目,以便开始使用它。我一直在关注thinkster.io上的教程(我做了一些小的修改),到目前为止我已经获得了很好的结果。我用邮差测试了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

你应该通过user数据save方法(将通过该请求body)的第一个参数,以后那里你可以把successCallback & errorCallback

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

结帐this article

+0

糟糕! :)没有看到缺少参数。这照顾了缺失的数据。然而,现在saveToken方法(也在服务中声明)抛出未定义。这可能是因为我在回调中,并且使用'this'不再引用该服务。我需要将从服务器返回的令牌保存到localstorage(这是saveToken所做的)。关于如何做到这一点的任何建议。 – hrivera

+0

@hrivera因为函数里面的'this'不是你正在想的这个..我强烈建议通过[这篇文章](http://javascriptissexy.com/understand-javascripts-this-with-清晰度和大师它/) –

+0

谢谢,将调查它 – hrivera

相关问题