2015-07-25 5 views
1

Я читал другие сообщения, которые имеют похожие ошибки 404, моя проблема в том, что я могу правильно запросить данные JSON, но не могу сэкономить, не получив эту ошибку.Угловой ресурс 404 Не найдено

Я использую Angular's $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

Вы уверены, что запрос 'POST' должен быть нажат' products.json/12-34'? – Tom

+0

вы получите эту ошибку, потому что сервер не может найти этот файл 'http: // localhost: 3000/api/products.json/12-34' и не имеет для этого маршрута – Grundy

+0

Если я что-то делаю, например' Product.save ({ id: myObject.id}) ', а' myObject.id' равно '12-34', и если мои данные структурированы так, как указано выше, не так ли? – Himmel

ответ

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

Вы, вероятно, не реализуют метод POST для URL-адресов, как /api/products.json/12-34. Метод POST запрашивается от углового для сохранения нового ресурса. Поэтому вам необходимо обновить приложение на стороне сервера, чтобы поддерживать его и выполнять фактическую экономию.

+0

Не имеет ли ресурс углов возможность обновлять файлы JSON с фронта -end, как это делается? – Himmel

+0

@ Химмель, угловая клиентская сторона, он не может напрямую обновлять файл на сервере – Grundy

+2

Угловой будет отправлять запрос серверной программе для сохранения ресурса. Если серверное приложение не знает, как это сделать, угловое будет получать ошибку. – JuniorCompressor

Смежные вопросы