我已阅读其他有类似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": ""
},
...
]
答案 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”。