2017-10-29 40 views
0

私が取り組んでいるこのプロジェクトがあります。 角度4を使用してGoogleブックAPIから書籍を取得することです'レスポンス'タイプの引数は 'string'タイプのパラメータに割り当てられません

JSONレスポンスの読み方を理解するのに苦労していますが、私はまだAngularを学んでいます。私がやっている場合 私はこの行のために、次のエラー

Argument of type 'Response' is not assignable to parameter of type 'string'. 

を取得していますインターネットを検索し、GitHubの にgoogle bookstore

を、このソースコードを発見した

let bookResponse = JSON.parse(body); 

私はわかりませんそれは正しい方法です。 あなたの助けをありがとう

以下はHTTPリクエストを送信するための私の方法です。

getBooks(searchparam: any){ 
let par = new HttpParams(); 
par.set('q', searchparam); 

return this.httpClient.get('https://www.googleapis.com/books/v1/volumes', { 
    params : new HttpParams().set('q',searchparam) 
}).map(
    (response: Response) => { 
    let data = response; 

    return data; 
    } 
); 

}以下

getBook() { 

const dataArrya = this.searchForm.get('param').value; 

console.log(dataArrya); 
this.requestService.getBooks(dataArrya) 
    .subscribe(
    response => { 
     this.printData(response) 
    // console.log(this.bookData); 
    }, 
    (error) => console.log(error) 
); 

}

private printData(res: Response) { 

let body = res; 
let books: Array<Book> = new Array<Book>(); 
let bookResponse = JSON.parse(body); 
console.log(bookResponse); 
console.dir(bookResponse); 
for (let book of bookResponse.items) { 
    books.push({ 
    title:book.volumeInfo.title, 
    subTitle: book.volumeInfo.subTitle, 
    categories: book.volumeInfo.categories, 
    authors: book.volumeInfo.authors, 
    rating: book.volumeInfo.rating, 
    pageCount: book.volumeInfo.pageCount, 
    image: book.volumeInfo.imageLinks === undefined ? '' : book.volumeInfo.imageLinks.thumbnail, 
    description: book.volumeInfo.description, 
    isbn: book.volumeInfo.industryIdentifiers, 
    previewLink: book.volumeInfo.previewLink 
    }); 
} 

} 
+1

ところで、上記のコードには誤りがあります。 HttpParamsインスタンスは不変で、 '.set'は連鎖する必要がありますhttps://stackoverflow.com/questions/45210406/angular-4-3-httpclient-set-params。この 'par.set( 'q'、searchparam)'は動作しません。 – estus

+0

ありがとうエスタス、それは私のために働いた、私は1つだけのパラメータがあるが、私はより多くの場合、それは問題です。 – OceanWavez

+0

これは、別の場所に正しいコードがあるので動作します。 'params:new HttpParams()。set( 'q'、searchparam)' – estus

答えて

0

JSON.parseは文字列を取り、JSONレスポンスHTTPリクエストからデータを取得し、読み込むための方法ですが、あなたはしていますオブジェクト(文字列ではありません)であるAngular Responseを渡します。

let bookResponse = JSON.parse(body.toString()); 
0

the referenceとしての状態、

responseType値が正常な応答本体が解析される方法を決定:文字列に角度Responseを変換するために、あなたはこのように、それにtoStringを呼び出すことができます。 responseTypeがデフォルトのjsonの場合、結果のオブジェクトの型インタフェースは型パラメータとしてrequest()に渡されます。

HttpClientgetデフォルトですでにJSON.parseとの応答を解析し、それを2回呼び出す必要はありません。

結果は平文で、ResponseHttp APIに属し、インポートされていない場合はResponse globalと混同される可能性があります)。

上記のrepositoryは、角2とHttpを使用しており、ここからのコードは適切ではありません。 HttpClientはAngular 4で導入された新しいAPIです。HttpHttpClientの主な実用上の違いは、後者では.map(response: Response => response.json())を要求に追加する必要がないことです。

関連する問題