使用AngularJS,我不想设置全局$ http.defaults.headers.common。我可以在每次$ resource调用时发送自定义标头吗?

时间:2014-03-30 21:53:43

标签: javascript angularjs http-post angularjs-resource angularjs-http

我正在调用一个我无法控制的后端服务器。目前它正在使用这样的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文档中找到任何相关内容。你们怎么想出这个东西?文档非常糟糕!

3 个答案:

答案 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 }
});