Получение маршрутов PUT для работы в Angular
Я ищу мудрости в сообществе англ. Я работаю над простым проектом с использованием стека MEAN. Я настроил свой бэкэнд API, и все работает как положено. Используя Postman, я наблюдаю ожидаемое поведение для маршрутов GET и PUT для извлечения / обновления одного значения - высокой оценки - которое сохраняется в его собственном документе в его собственной коллекции в MongoDB. Все идет нормально.
Все идет не так, как надо, когда вы пытаетесь получить доступ к конечной точке API PUT из Angular. Доступ к конечной точке GET не составляет проблем, а получение и отображение данных работает без проблем. Тем не менее, после значительного чтения и поиска, я не могу правильно получить доступ к конечной точке PUT и обновить данные рекордов, когда это событие вызвано игровым процессом. Ниже приведены фрагменты кода, которые я считаю актуальными для справки.
ЗАДНИЙ КОД:
SCHEMA:
const _scoreSchema = {
name: { type: String, required: true },
value: { type: Number, "default": 0 }
};
МАРШРУТЫ:
router
.route('/api/score/:highScore')
.put(scoreController.setHighScore);
ДИСПЕТЧЕР:
static setHighScore(req, res) {
scoreDAO
.setHighScore(req.params.highScore)
.then(highScore => res.status(200).json(highScore))
.catch(error => res.status(400).json(error));
}
DAO:
scoreSchema.statics.setHighScore = (value) => {
return new Promise((resolve, reject) => {
score
.findOneAndUpdate(
{"name": "highScore"},
{$set: {"value": value} }
)
.exec(function(err, response) {
err ? reject(err)
: resolve(response);
});
});
}
УГЛОВОЙ КОД:
ДИСПЕТЧЕР:
private _updateHighScore(newHighScore): void {
console.log('score to be updated to:', newHighScore)
this._gameService
.updateHighScore(newHighScore);
}
ОКАЗАНИЕ УСЛУГ:
updateHighScore(newHighScore: Number): Observable<any> {
console.log(newHighScore);
let url = '/api/score/' + newHighScore;
let _scoreStringified = JSON.stringify({value: newHighScore});
let headers = new Headers();
headers.append("Content-Type", "application/json");
return this._http
.put(url , _scoreStringified, {headers})
.map((r) => r.json());
}
Обратите внимание, что console.log (newHighScore) в последнем блоке кода выше правильно печатает значение нового рекорда, который будет обновлен, просто не записывается в базу данных.
Концептуальный вопрос с маршрутами PUT в угловом формате заключается в следующем: если API уже настроен таким образом, что он получает всю информацию, необходимую для успешного обновления базы данных (с помощью параметра маршрута), почему требуется снова предоставлять всю эту информацию в угловая функция.put()? Похоже, что изобретать велосипед и не использовать надежную конечную точку API, которая уже была создана. Иными словами, прежде чем копаться в документах, я наивно ожидал, что что-то вроде.put (url) будет всем, что требуется для вызова API, так что же такое недостающее звено в моей логике?
Спасибо!