Ошибка типа: преобразование круговой структуры в JSON угловой 6 - PullRequest
0 голосов
/ 01 февраля 2019

Ниже приведен мой класс по угловой 6

export class PersonalInfo {
    private _identity_Number: string;
    public get identity_Number(): string {
        return this._identity_Number;
    }
    public set identity_Number(v: string) {
        this._identity_Number = v;
    }
    private _name: string;
    public get Name(): string {
        return this._name;
    }
    public set Name(v: string) {
        this._name = v;
    }

    private _father_Name: string;
    public get father_Name(): string {
        return this._father_Name;
    }
    public set father_Name(v: string) {
        this._father_Name = v;
    }

    private _cnic: string;
    public get cnic(): string {
        return this._cnic;
    }
    public set cnic(v: string) {
        this._cnic = v;
    }
   constructor (private _services: DeoService) {}
}

Я принимаю данные от пользователя и хочу сохранить эту информацию в моей базе данных.

Ниже приведена функция сохранения информации

this.user.saveUser(this._api, this._personalInfo);

 public saveUser (api: string, model: PersonalInfo ): Observable<boolean> {
    return this._http.post<boolean>(api, {user: model});
  }

Но когда я пытаюсь передать объект PersonalInfo в saveuser, он выдает мне следующую ошибку:

    ERROR TypeError: Converting circular structure to JSON
        at JSON.stringify (<anonymous>)
        at HttpRequest.push../node_modules/@angular/common/fesm5/http.js.HttpRequest.serializeBody (http.js:601)
        at Observable._subscribe (http.js:1460)
        at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe (Observable.js:43)
        at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe (Observable.js:29)
        at subscribeTo.js:21
        at subscribeToResult (subscribeToResult.js:11)
        at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._innerSub (mergeMap.js:74)
        at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._tryNext (mergeMap.js:68)
        at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._next (mergeMap.js:51)

Даже я делаю JSON.stringify (obj).Я все еще получаю следующую ошибку

RROR TypeError: Converting circular structure to JSON
    at JSON.stringify (<anonymous>)
    at DeoService.push../src/app/shared/model/deo.service.ts.DeoService.saveUser (deo.service.ts:23)
    at ProjectComponent.push../src/app/layout/project/project.component.ts.ProjectComponent.ngOnInit (project.component.ts:59)
    at checkAndUpdateDirectiveInline (core.js:18620)
    at checkAndUpdateNodeInline (core.js:19884)
    at checkAndUpdateNode (core.js:19846)
    at debugCheckAndUpdateNode (core.js:20480)
    at debugCheckDirectivesFn (core.js:20440)
    at Object.eval [as updateDirectives] (ProjectComponent_Host.ngfactory.js? [sm]:1)
    at Object.debugUpdateDirectives [as updateDirectives] (core.js:20432)

Что это значит.Как я могу исправить эту ошибку?Заранее спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Это означает, что у вас есть модель структуры, которая является круглой.Например,

export class Foo {

  id: number;
  bar: Bar;
}

export class Bar {

  name: string;
  foo: Foo;
}

Этот тип структуры может циклически повторяться для круговой ссылки.Это ошибка.

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

Попробуйте исследовать ее с некоторыми значениями console.log для всего объекта и найти эту

0 голосов
/ 01 февраля 2019

перед выполнением запроса POST необходимо сериализовать JSON, который вы отправляете, т.е. JSON.stringify(object which you are planning to send)

this.user.saveUser(this._api, this._personalInfo);

public saveUser (api: string, model: PersonalInfo ): Observable<boolean> {
  return this._http.post<boolean>(api, JSON.stringify({user: model}));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...