当我点击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 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)
谢谢 :)
我有一个支持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 项目。
在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) ”调试响应,但它没有显示任何内容。看起来如果响应中有错误,那么它不会进入拦截器块。
我有一个简单的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?或者我可能需要为此使用别的东西?
我想对我的客户端模型/资源进行单元测试.
我使用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) 我想将复杂的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) 我可以为每个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做到这一点?
我有一个包含此功能的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应用程序中将服务与控制器分开,我是按照以下方式完成的:
的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) angularjs ×10
restangular ×10
javascript ×3
jasmine ×1
json ×1
karma-runner ×1
mocking ×1
node.js ×1
rest ×1
restify ×1