извлечение данных из ответов на английском языке - PullRequest
1 голос
/ 02 августа 2020

Я пытался получить список элементов с сервера. затем я добавляю разбиение на страницы в систему, и ответ сервера изменяется следующим образом:

{
    "items": [
        {
            "book_ref_no": 12,
            "book_name": "ice and fire",
            "author": "jrr martine",
            "category": "HISTORY",
            "availability": false
        },
        {
            "book_ref_no": 14,
            "book_name": "word war 2",
            "author": "Not me",
            "category": "NOVEL",
            "availability": false
        }
    ],
    "meta": {
        "totalItems": 4,
        "itemCount": 2,
        "itemsPerPage": "2",
        "totalPages": 2,
        "currentPage": 1
    },
    "links": {
        "first": "http://localhost:3000/books?limit=2",
        "previous": "",
        "next": "http://localhost:3000/books?page=2&limit=2",
        "last": "http://localhost:3000/books?page=2&limit=2"
    }
}

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

getBooks(){
      this.http.get<Book[]>('http://localhost:3000/books')
      .subscribe(books => {
          this.books = books;
          this.booksUpdated.next(books);
        },
        );
      }

предыдущий ответ был как

[
 { book 1...},
 { book 2...},
 ...
]

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Можно попробовать вот так. Сначала создайте интерфейс, который определяет ответ.


interface Book{
  book_ref_no: number,
  book_name: string,
  author: string,
  category: string, // or Enum
  availability: boolean
}

interface Meta{
  totalItems: number,
  itemCount: number,
  itemsPerPage: string,
  totalPages: number,
  currentPage: number
}

interface Links{
  first: string,
  previous: string,
  next: string,
  last: string
}

interface PagedResponse{
  items: Book[],
  meta: Meta,
  links: Links
}

Затем вы можете просто взять книги из этого ответа, например,

getBooks(){
    this.http.get<PagedResponse>('http://localhost:3000/books')
      .subscribe(pagedResponse => {
          this.books = pagedResponse.items;
        },
      );
  }
1 голос
/ 02 августа 2020

Сначала обновите свой интерфейс

interface Book{ 
book_ref_no: number, book_name: string, 
author: string, 
category: string,
 availability: boolean }

 interface Meta{ 
totalItems: number, 
itemCount: number,
 itemsPerPage: string, 
totalPages: number, 
currentPage: number }

 interface Links{ first: string,
 previous: string, 
next: string, 
last: string } 

interface BooksResponse{ 
items: Book[], 
meta: Meta, 
links: Links }

Затем используйте BooksResponse в качестве типа возврата вашего API

getBooks(){ 
        this.http.get<BooksResponse>('http://localhost:3000/books')
         .subscribe(data => { 
 this.books = data.items;
    
     this.booksUpdated.next(this.books);
    
         }, ); 
        }
...