标签: restangular

使用正文发送Restangular DELETE或customDELETE

当我点击api时:

我怎样才能点击api(不是来自角应用程序):

apiadress /端点/ IDNumber中/?PARAM =参数

使用DELETE,一切正常并且符合预期.但当我从Restangular这样做时:

Restangular.one("endpoint").customDELETE(idnumber,params)
Run Code Online (Sandbox Code Playgroud)

我从服务器得到这个回复:

"detail":"请求中不支持的媒体类型'text/plain; charset = UTF-8'."

看起来DELETE与服务器一起出现了一个BODY,我找不到如何强制一个空体.

(我在其他问题中看到了这个,所以我事先说,是的api在我的开发机器的不同端口,我有:

config(['$httpProvider', function($httpProvider) {
        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
    }
    ])
Run Code Online (Sandbox Code Playgroud)

我喜欢Restangular,但这个问题一直困扰着我.谢谢!

rest angularjs restangular

2
推荐指数
2
解决办法
6104
查看次数

如何实现等待多个异步请求的承诺?

我们使用REST API,其中一个功能允许用户对对象进行批量编辑,每个对象都需要PUT请求来编辑所述对象.现在我们做

angular.foreach(objects, function(data) {
    restangular.one('user', user.id).one(object).put();
});
angular.updateInfo('user');
Run Code Online (Sandbox Code Playgroud)

这里的问题是updateInfo调用与PUT调用异步发生,因此新的用户信息并不总是完整/正确.有没有可能有类似的东西.

var promise = restangular.one('user', user.id);
angular.foreach(objects, function(data) {
    promise.one(object).put();
});
promise.then(function (data) {
    angular.updateInfo('user');
});
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

angularjs restangular

2
推荐指数
1
解决办法
1648
查看次数

具有分页参数的Restangular GET

我有一个支持HAL的rest端点并返回一个JSON Object而不是一个Array,因此我使用下面的Restangular调用:

var endpoint = Restangular.oneUrl('/transmissions/');
endpoint.get().then(doStuffWithData());
Run Code Online (Sandbox Code Playgroud)

当我/transmissions?page=0&size=20从浏览器执行此操作时,实际上会影响HAL JSON对象的content元素.

如何修改上面的URL以包含分页参数.我做了以下但是它不起作用:

    var endpoint = Restangular.oneUrl('transmissions/', {
        page: $scope.page,
        size: $scope.size
    });
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

http://localhost:7001/myApp/transmissions/%5Bobject%20Object%5D 
Run Code Online (Sandbox Code Playgroud)

angularjs restangular

2
推荐指数
1
解决办法
3019
查看次数

Restangular:addResponseInterceptor 不起作用

我正在从事 angularjs 项目。

app.js中,我使用addResponseInterceptor来拦截对服务器的每个请求。如果响应中没有错误(response.status == 200 OK),那么它就完美了。但我特别想在(response.status == 401)时进行拦截。在这种情况下,我想将用户重定向到登录页面。但这不起作用。

这是我的app.js addResponseInterceptor 的代码:

RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
        if (response.status === 401)
        {
            window.location = 'To the login page';
        } else
        {
            var extractedData;
            extractedData = data;
            return extractedData;
        }
    });
Run Code Online (Sandbox Code Playgroud)

当请求拒绝获取数据时,我收到这些错误

在此输入图像描述

我尝试通过“ console.log(response) ”调试响应,但它没有显示任何内容。看起来如果响应中有错误,那么它不会进入拦截器块。

angularjs restangular

2
推荐指数
1
解决办法
1234
查看次数

使用Restangular请求从REST API下载文件

我有一个简单的node.js + Restify后端,标准的CORS设置和这个端点:

var file = '1,5,8,11,12,13,176,567,9483';

server.get('/download', function(req, res, next) {
  res.set({"Content-Disposition": "attachment; filename='numbers.csv'"});
  res.setHeader("Content-type", "text/csv");
  res.send(file);
  return next();
}, function(err) {
  res.send(err);
});
Run Code Online (Sandbox Code Playgroud)

它想要做的是创建CSV文件并将其返回.

当我只是在网络浏览器中键入端点地址并按Enter键时,它的效果很好.文件正确下载.

但是,当我尝试做同样的事情,但我没有使用浏览器的地址栏,而是使用Restangular:

Restangular.one('download').get().then(function (res) {
    console.log(res);
});
Run Code Online (Sandbox Code Playgroud)

它只是将响应写入控制台,但没有下载任何文件.

有没有办法使用Restangular?或者我可能需要为此使用别的东西?

javascript node.js angularjs restify restangular

2
推荐指数
1
解决办法
4885
查看次数

用angularjs jasmine业力嘲弄Restangular

我想对我的客户端模型/资源进行单元测试.

我使用restangular并且想要模拟它并检查/间谍是否正确调用restangular.

我的资源:

module = angular.module 'myapp.core.resources'

class Messaging
  constructor: (@restangular) ->
    @resource = @restangular.all('messaging')

  send_to: (user, message) =>
    @resource.post(to: user.id, message: message)

module.service '$messaging', ['Restangular', Messaging]
Run Code Online (Sandbox Code Playgroud)

我的模仿:

# Globally available
@restangularMock =
  one: jasmine.createSpy()
  all: (resource) ->
    post: jasmine.createSpy('post'),
    get: jasmine.createSpy('get')
Run Code Online (Sandbox Code Playgroud)

我的测试:

# Set the global config before end of configuration lifecycle
angular.module('myapp.core.config').config (GlobalConfig) ->
  GlobalConfig.setBaseConfig
    api:
      baseUri: '/api',
      csrfTokens: {'messaging': 'abcdef'}

describe "Resources", ->
  beforeEach module ($provide)->
    $provide.value('Restangular', self.restangularMock)

  beforeEach module("myapp.core.resources")

  describe "#Messaging", -> …
Run Code Online (Sandbox Code Playgroud)

mocking jasmine angularjs karma-runner restangular

1
推荐指数
1
解决办法
4359
查看次数

Restangular:不可能发布复杂的json参数?

我想将复杂的json发送到put路由:

    Restangular.one('model3ds', model.uuid).put(
       api_key: "blabla"
       model3d: { is_public: true }
    )
Run Code Online (Sandbox Code Playgroud)

但它似乎不可能与Restangular,因为它发送:

api_key: "blabla"
model3d: "{\"is_public:\":true}"
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何改变这种行为?

注意:我可以这样做,但如果我有一个完整的对象要发送,而不仅仅是一个属性,那是不可能的.

    Restangular.one('model3ds', model.uuid).put(
        "model3d[is_public]": true
    )
Run Code Online (Sandbox Code Playgroud)

javascript json angularjs restangular

1
推荐指数
1
解决办法
1361
查看次数

restangular多个api源

我可以为每个angularjs app设置一个api提供者,像这样

    RestangularProvider.setBaseUrl('http://localhost:8080/api');
Run Code Online (Sandbox Code Playgroud)

但我如何设置多个基本网址并有选择地使用它们.我想配置和使用以下两个端点

      RestangularProvider.setBaseUrl('http://localhost:8080/api');

      RestangularProvider.setBaseUrl('http://localhost:8090/apiws');
Run Code Online (Sandbox Code Playgroud)

我如何用Restangular做到这一点?

angularjs restangular

1
推荐指数
1
解决办法
2781
查看次数

AngularJs无法读取未定义的属性'then'

我有一个包含此功能的authenticationService:

//this.userApi = Restangular.service('api/sessions');

login(user) {
    let that = this;

    this.userApi.post(user).then(function(user) {
        that.session.create(user.sessionId, user.userId, user.username);
        return user;
    });
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中:

login() {
    this.authService
        .login(that.user)
        .then(function(user) {
            $scope.setCurrentUser(user);

        },
        function(result) {
            console.log('fail', result.status);
        });
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我在这一行上得到'无法读取属性'然后'未定义': that.authService.login(that.user).then(function (user) ...

angularjs restangular

1
推荐指数
1
解决办法
320
查看次数

Angularjs中与控制器分开的服务

我想在angularjs应用程序中将服务与控制器分开,我是按照以下方式完成的:

app.js有:

var myApp = angular.module('myApp',['restangular','ui.router','myApp.controllers','myApp.services']);
Run Code Online (Sandbox Code Playgroud)

controllers.js:

 angular.module('myApp.controllers',[]);
Run Code Online (Sandbox Code Playgroud)

services.js:

angular.module('myApp.services',[]);
Run Code Online (Sandbox Code Playgroud)

我有一个与以下相关的控制器controllers.js:

angular.module('myApp.controllers',[]).controller('ContactController', ContactController);

ContactController.$inject = [ '$scope', 'ContactService' ];
function ContactController($scope, ContactService) {
     console.log("here call ctrl contact");
     $scope.contacts = ContactService.getAll(); 
}
Run Code Online (Sandbox Code Playgroud)

这将ContactController调用ContactService在单独文件中定义的服务:ContactService .js

angular.module('myApp.services',[])

.factory('ContactService', function(Restangular){
    var Contacts = Restangular.all('contacts');

    return {
        getAll : function(){
            return Contacts.getList().$object;
        }
    };

});
Run Code Online (Sandbox Code Playgroud)

问题是,当我试图调用此控制器时,我收到以下错误:

错误:[$ injector:unpr]未知提供者:ContactServiceProvider < - ContactService http://errors.angularjs.org/1.2.19/ $ injector/unpr?p0 = ContactServiceProvider%20%3C-%20ContactService

我该如何解决这个问题?

更新:这是我的应用程序的结构:

应用程序的结构

我在app.js:

.state('contacts', {
        url: '/contacts', …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs restangular

1
推荐指数
1
解决办法
465
查看次数