response.json 不是函数。角火

response.json is not a function. AngularFire

所以我正在使用 AngularFire2 构建一个应用程序,这是在一个服务中,但是当函数搜索得到 运行 它调用错误 response.json 不是一个函数。 Firebase returns 一个可观察的,我不确定为什么这个片段不起作用。

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { Article } from '../models/index';

  search(term: string): Observable<Article[]> {
    return this.af.database
      .list('/articles/', {
        query: {
          orderByChild: "title",
          equalTo: term,
          limitToFirst: 10
        }
      })
      .map(response => response.json().data as Article[]);
  }

AngularFire2 的 list observable 不发出 HTTP 响应对象。它发出一个匿名对象数组,代表与查询匹配的项目。

如果 Article 是一个接口,您可以删除 map 运算符并转换 observable 本身:

import { Observable } from 'rxjs/Observable';
import { Article } from '../models/index';

search(term: string): Observable<Article[]> {
  return this.af.database
    .list('/articles/', {
      query: {
        orderByChild: 'title',
        equalTo: term,
        limitToFirst: 10
      }
    }) as Observable<Article[]>;
}

如果 Article 是 class,您应该使用 map 运算符创建实际的 Article 实例(使用合适的构造函数):

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { Article } from '../models/index';

search(term: string): Observable<Article[]> {
  return this.af.database
    .list('/articles/', {
      query: {
        orderByChild: 'title',
        equalTo: term,
        limitToFirst: 10
      }
    })
    .map(list => list.map(item => new Article(item));
}