为Angular 2实现HTTP服务模拟?

为Angular 2实现HTTP服务模拟?,angular,typescript,Angular,Typescript,我试图用Angular编写一个模拟HTTP服务,它从JSON文件获取数据并返回该数据 import { Request, RequestOptionsArgs, Response } from '@angular/http'; import { Observable } from 'rxjs/Observable'; export const HttpServiceMockup = { json = // get data from json file request(ur

我试图用Angular编写一个模拟HTTP服务,它从JSON文件获取数据并返回该数据

import { Request, RequestOptionsArgs, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';    

export const HttpServiceMockup = {

  json = // get data from json file

  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
    // based on the passed url return some data from the json
    // and wrap that data in a Observable of Response.
    return null;
  }

};
从'@angular/http'导入{Request,RequestOptionsArgs,Response};
从“rxjs/Observable”导入{Observable};
导出常量HttpServiceMockup={
json=//从json文件获取数据
请求(url:string |请求,选项?:RequestOptionsArgs):可观察{
//根据传递的url,从json返回一些数据
//并将这些数据包装成一个可观察的响应。
返回null;
}
};
如何包装数据,以便从'@angular/http'返回
Observable

导入{Request,RequestOptionsArgs,Response};
从“rxjs/Observable”导入{Observable};
导出常量HttpServiceMockup={
json=//从json文件获取数据
请求(url:string |请求,选项?:RequestOptionsArgs):可观察{
//根据传递的url,从json返回一些数据
//并将这些数据包装成一个可观察的响应。
if(url.url.indexOf('someUrl')>-1){
(数据)的可观测返回;
}
返回null;
}
};

更接近您当前的代码

import { Request, RequestOptionsArgs, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';    

export const HttpServiceMockup = {

  let data = [{id:1, name:"John"}];

  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
    // based on the passed url return some data from the json
    // and wrap that data in a Observable of Response.
    let response = null;
    if (url.indexOf("YOUR_URL_MATCH")>=0) 
      response = new Response({body: JSON.stringify(data)});

    return Observable.of(response);
  }
};

一般来说,要将模拟数据包装到可观察对象中,只需执行以下操作

const mockData = {
  id: 123
};

return Observable.of(mockData);
在您的服务方法中


当然,记住从'rxjs/Observable'导入{Observable}

为什么不使用现有的?然后,在
mockRespond
时,您可以在
ResponseOptions
中提供适当的JSON作为
主体。您的问题是如何返回可观察的数据,对吗?
import { MockBackend } from '@angular/http/testing';
import { Http, BaseRequestOptions } from '@angular/http';

@NgModule({
  providers: [
     BaseRequestOptions,
     MockBackend,
     {
       provide: Http,
       deps: [MockBackend, BaseRequestOptions],
       useFactory: (backend, options) => { return new Http(backend, options); }
     }
  ],
  imports: [BrowserModule],
  declarations: [App],
  bootstrap: [App]
})
export class AppModule { }

export class App { 
  constructor(private mockbackend: MockBackend) { 
    let data = [{id:1, name:"John"}];  

    mockbackend.connections.subscribe(connection => {
      if (connection.request.url.indexOf("YOUR_URL_MATCH")>=0) 
        connection.mockRespond(new Response({
          body: JSON.stringify(data)
        }));
    });
  }
}
const mockData = {
  id: 123
};

return Observable.of(mockData);