Angular资源404 Not Found

时间:2015-07-25 19:30:31

标签: json angularjs angular-resource

我已阅读其他有类似404错误的帖子,我的问题是我可以正确查询JSON数据,但无法保存而不会收到此错误。

我正在使用Angular的$resource与JSON端点进行交互。我有一个从工厂返回的资源对象,如下所示:

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

我的JSON是有效的,我可以成功使用资源的query()方法返回我的指令内的对象,如下所示:

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)

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

这是我的数据结构:

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

3 个答案:

答案 0 :(得分:2)

默认情况下,$save方法使用 POST 动词,您需要确定服务器接受哪些 HTTP谓词才能生成更新,大多数现代api服务器接受 PATCH PUT 更新数据的请求,而不是 POST

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

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

查看$resource docs了解详情。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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