Angular 资源 404 未找到

Angular resource 404 Not Found

我读过其他有类似 404 错误的帖子,我的问题是我可以正确查询 JSON 数据,但如果不出现此错误就无法保存。

我正在使用 Angular 的 $resource 与 JSON 端点进行交互。我有来自工厂的资源对象 returning,如下所示:

app.factory('Product', function($resource) {
        return $resource('api/products.json', { id: '@id' });
});

我的 JSON 是有效的,我可以成功地使用资源的 query() 方法来 return 我的指令中的对象,就像这样:

var item = Product.query().$promise.then(function(promise) {
  console.log(promise) // successfully returns JSON objects
});

但是,当我尝试使用 save() 方法保存已更新的项目时,出现 404 Not Found 错误。

这是我得到的错误:

http://localhost:3000/api/products.json/12-34 404 (Not Found)

我知道我的文件路径是正确的,因为我可以 return 项目来更新视图。为什么会出现此错误以及如何保存项目?

这是我的数据结构:

[
    {
        "id": "12-34",
        "name": "Greece",
        "path": "/images/athens.png",
        "description": ""
    },
    ...
]

您可能没有为 /api/products.json/12-34 等网址实现 POST 方法。从 angular 请求 POST 方法以保存新资源。因此,您需要更新服务器端应用程序以支持它并进行实际保存。

默认情况下,$save 方法使用 POST 动词,您需要弄清楚哪些 HTTP 动词 被您的服务器接受以便进行更新,大多数现代 api 服务器接受 PATCHPUT 更新数据的请求而不是 POST.

然后配置您的 $resource 实例以使用正确的动词,如下所示:

app.factory('Product', function($resource) {
        return $resource('api/products.json', { id: '@id' }, {'update': { method:'PUT' }});
});

查看 $resource docs 了解更多信息。


注意: $resource 用于将前端与支持 RESTful 协议的后端服务器连接起来,除非您使用一个来接收数据并保存它变成一个文件而不是一个数据库。 否则,如果您只使用需要实现 $resource 并且暂时没有服务器的前端解决方案,那么请使用假的,那里有很多很棒的解决方案,例如 deployd.

app.factory('Product', function($resource) {
    return $resource('api/products.json/:id', { id: '@id' });
});

尝试在 URL 字符串的末尾添加“/:id”。