我正在调用一个我无法控制的后端服务器。目前它正在使用这样的jQuery ajax:
return $.ajax({
type: "POST",
url: "/api/cases/store",
contentType: "application/json",
data: JSON.stringify(parameters),
headers: { "Authorization": cred } : {}
}) // ... etc.
我想将其转换为使用$resource
服务,并使其正常工作
$http.defaults.headers.common['Authorization'] = cred;
return $resource('/api/cases/store').save();
唯一的问题是我必须使用身份验证凭据设置全局$http
服务默认值。
我看到你应该能够通过$http
来电传递自定义标头,现在可以通过$resource
来电,但我找不到任何示例在我的情况下如何做到这一点(使用POST)。
我也无法在AngularJS文档中找到任何相关内容。你们怎么想出这个东西?文档非常糟糕!
答案 0 :(得分:6)
而不是:
$http.defaults.headers.common['Authorization'] = cred;
return $resource('/api/cases/store').save();
这样做:
return $resource('/api/cases/store', {}, {
save: {
method: 'POST',
headers: { 'Authorization': cred }
}
}).save();
请注意,您必须使用'save'作为操作,第三个参数中的第一个键。无法测试,所以让我知道它是否有效。
我同意。文档没有谈论它。看一下angular-resource.js中$ resource源代码中的DEFAULT_ACTIONS列表
答案 1 :(得分:3)
$resource documentation确实涵盖了它,尽管阅读肯定很难听。您必须为其执行自定义操作,并且您可以传递给配置的所有参数都不会列在$ resource页面上。您需要查看$ http docs页面,了解配置对象的可能性。
$resource()
有3个参数:URL,默认参数对象和actions对象。 Actions基本上将方法名称映射到$ http configs。
您想要制作自定义操作,例如:
var MyResource = $resource('/myendpoint/', {}, { 'post': { method: 'POST', headers: {"Authorization" : cred}}); // and any other $http options you might want
这些操作会转换为MyResource对象上的方法,因此如果需要,您可以将操作命名为更加语义而不仅仅是“发布”(文档页面上的示例为信用卡资源设置“收费”操作,例如)。
答案 2 :(得分:1)
$http的文档非常可靠,与其网站上的大多数其他文档一样。
您绝对可以在每个AJAX调用上定义您的auth标头。
尝试这样的事情:
$http({
method: 'POST',
url: 'serverUrl',
data: parameters,
headers: { Authorization: cred }
});