post - Как записать объект в базу json-server?


0

Не могу понять, почему не происходит запись объекта в базу данных json-server. Все развернуто локально, аналогичный код работает в другом компоненте.

Вот модель:

export class Paei {

    constructor(
        public person_id: number,
        public date: string,
        public skill_p: number,
        public skill_a: number,
        public skill_e: number,
        public skill_i: number
        ) {}
}

Вот код метода, который не срабатывает:

  pushPaei() {
    this.skilldata = this.valuesService.getSkillResult();

    console.log(this.skilldata);

    this.paei = new Paei(
      this.personId,
      moment().format(DD.MM.YYYY HH:mm:ss),
      this.skilldata[0],
      this.skilldata[1],
      this.skilldata[2],
      this.skilldata[3]
    );

    console.log(this.paei);

    this.sub2 = this.paeiService.addPaei(this.paei)
    .subscribe(() => {});

    this.router.navigate([/assessment/paei-result, this.personId]);

  }

И код сервиса:

import { Injectable } from @angular/core;
import { HttpClient } from @angular/common/http;
import { Observable } from rxjs;

import { Paei } from src/app/assessment/paei-test/models/paei.model;
import { BaseApi } from ../core/base-api;

@Injectable()

export class PaeiService extends BaseApi {
    paei: Paei;

    constructor(public http: HttpClient) {
        super(http);
    }

    addPaei(paei: Paei): Observable<Paei> {

        console.log(this.paei);

        return this.post(paei, paei);
    }

    updatePaei(paei: Paei): Observable<Paei> {
        return this.put(`paei/${paei.person_id}`, paei);
      }

    deletePaeiById(id: number): Observable<Paei> {
        return this.delete(`paei/${id}`);
    }

    getPaeiById(id: number): Observable<Paei> {
        return this.get(`paei/${id}`);
    }

}

Там, где console.log получаю undefined, хотя в методе выше в сервис передается правильный объект Paei

Источник
  •  1312
  •  1
  • 16 янв 2019 2019-01-16 18:00:46
вы пытаетесь, console.log(this.paei) где this указывает на инстанс сервиса, console.log(paei) - и будет вам счастье — 16 янв 20192019-01-16 18:25:58.000000
this.sub2 = this.paeiService.addPaei(this.paei) .subscribe(() => {});. Здесь в сервис передаю аргументом. Сеттится выше — 16 янв 20192019-01-16 18:13:02.000000
а с чего вы взяли что вы там должны получить не undefined? свойство paei нигде не сеттится — 16 янв 20192019-01-16 18:11:28.000000
В последнем из них, который в сервисе. Предыдущие все возвращают правильно — 16 янв 20192019-01-16 18:10:12.000000
у вас куча консоль логов - в каком именно undefined? — 16 янв 20192019-01-16 18:04:58.000000

1 ответ

0

Разобрался самостоятельно. Решил изменением кода метода. Перенес навигацию в тело subscribtion

pushPaei() { this.skilldata = this.valuesService.getSkillResult();

console.log(this.skilldata);

this.paei = new Paei(
  this.personId,
  moment().format(DD.MM.YYYY HH:mm:ss),
  this.skilldata[0],
  this.skilldata[1],
  this.skilldata[2],
  this.skilldata[3]
);

console.log(this.paei);

this.sub2 = this.paeiService.addPaei(this.paei)
.subscribe(() => {
  this.router.navigate([/assessment/paei-result, this.personId]);
});

}