Получение маршрутов 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, так что же такое недостающее звено в моей логике?

Спасибо!

0 ответов

Другие вопросы по тегам