Restangular POST不传递数据参数

时间:2014-10-03 13:34:58

标签: ruby-on-rails angularjs ruby-on-rails-4 restangular

我是使用restangular的新手。话虽如此,我有下面的POST调用,由于某种原因没有按预期工作。

Restangular.all("user").all("login").post({username: 'test@user.com', password: 'xyz'}).then(function(account)
{ 
     console.log(account);
});

我看到POST请求转到网址 / api / v1 / user / login 这是正确的网址。但是,post参数似乎没有通过。查看相同的POST请求,我没有看到用户名/密码数据。此外,我的API正在抛出未经授权的错误,该错误告诉我它无法根据凭据验证用户。

我也试过以下变种......

Restangular.one("user").post("login", {username: 'test@user.com', password: 'xyz'}).then(function(account)
{ 
    console.log(account);

}) 

仍然没有发送帖子数据。我也试过......

Restangular.all("user").post("login", {username: 'test@user.com', password: 'xyz'}).then(function(account)
{ 
    console.log(account);

}) 

这似乎会创建一个不正确的网址 / api / v1 / user ,并且不会显示任何帖子数据。

我可以对 / api / v1 / user / login 执行cURL POST请求而不会发出POST数据。

cURL -X POST /api/v1/user/login -d "username=test@user.com&password=xyz"

我也更新了我的卷曲声明@David在他的答案中建议......

curl -X POST -d '{"username": "test@user.com", "password": "xyz"}' '/api/v1/user/login' -H Content-Type:application/json

哪个仍然奏效。但是,使用restangular发布不会......

Restangular.all("user").post("login", {username: 'test@user.com', password: 'xyz'}).then(function(account)
    { 
        console.log(account);

    }) 

其他想法?

3 个答案:

答案 0 :(得分:0)

我不是Restangular的专家,但似乎.all()为对象创建了一整套REST API。在这种情况下,我认为你只想打电话给.all()"用户"并使用login作为子资源。

var users = Restangular.all("user");

users.post('login', {
  username: 'test@user.com',
  password: 'xyz'
}).then(...);

此外,您需要确保您的服务器实际上有一个POST /users/login端点。

答案 1 :(得分:0)

我看到了一年前的问题,但无论如何。我遇到了同样的问题而且我发现我找到了解决这个问题的方法。一切都在Restangular.setRequestInterceptor事件中。因此,如果您的代码中有这样的拦截器,那么您需要确保在执行所需操作后它返回已接受的元素参数。例如,我之前所拥有的:

self

那应该怎么做:

Restangular.setRequestInterceptor(function () {
            $rootScope.validationErrors = [];
            activeRequests++;
            $rootScope.loading = true;          
        })

答案 2 :(得分:0)

你发错了邮政参数,你有:

Restangular.all("user").all("login")
.post({username: 'test@user.com', password: 'xyz'})
.then(function(account) { 
    console.log(account); 
});

所以,你需要做一些改变,它会有效(正确发送身体参数):

Restangular.all("user").all("login")
.post('', {username: 'test@user.com', password: 'xyz'})
.then(function(account) { 
    console.log(account); 
});

注意:我在restangular v1.5.2

上尝试过 祝你好运!