4

我正在调用我无法控制的后端服务器。目前它使用这样的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 文档中也找不到任何关于此的内容。大佬们是怎么想出这些东西的?文档太差了!

4

3 回答 3

7

而不是这个:

$http.defaults.headers.common['Authorization'] = cred;
return $resource('/api/cases/store').save();

做这个:

return $resource('/api/cases/store', {}, {
    save: {
        method: 'POST',
        headers: { 'Authorization': cred }
    }
}).save();

请注意,您必须使用“保存”作为操作,即第三个参数中的第一个键。无法测试它,所以让我知道它是否有效。

并且我同意。文档没有谈论它。查看 angular-resource.js 中 $resource 源代码中的 DEFAULT_ACTIONS 列表

于 2014-03-30T22:45:35.347 回答
3

$resource 文档确实涵盖了它,尽管它确实难以阅读。您必须对其进行自定义操作,并且您可以传递给配置的所有参数都不会在 $resource 页面上列出。您需要查看 $http 文档页面以了解配置对象的可能性。

$resource()接受 3 个参数:URL、默认参数对象和操作对象。基本上,操作将方法名称映射到 $http 配置。

您想要进行自定义操作,例如:

var MyResource = $resource('/myendpoint/', {}, { 'post': { method: 'POST', headers: {"Authorization" : cred}}); // and any other $http options you might want

这些操作会变成 M​​yResource 对象上的方法,因此您可以根据需要将操作命名为比“发布”更语义化的名称(例如,文档页面上的示例为信用卡资源设置了“收费”操作)。

于 2014-03-30T22:22:32.740 回答
1

$http的文档非常可靠,他们网站上的大多数其他文档也是如此。

而且您绝对可以在每个单独的 AJAX 调用上定义您的身份验证标头。

尝试这样的事情:

$http({
    method: 'POST',
    url: 'serverUrl',
    data: parameters,
    headers: { Authorization: cred }
});
于 2014-03-30T22:13:46.183 回答