angular - InMemoryWebApiModule - estado: 404 - colección no encontrada
Estoy intentando usar angular2 InMemoryWebApiModule e implementar el InMemoryDbService, para crear un simulacro de mi servidor backend. Lo configuré como (pensé) debería ser, pero de alguna manera no puedo acceder a la estructura de datos que implementa el InMemoryDbService (WorkerData en worker.ts) y sigo recibiendo el estado 404 ("Colección 'workers' no encontrada"). He simplificado el código para que sea más claro. Esto es un problema de URL - no puedo entender por qué.
El problema ocurre al ejecutar la función getWorkrs en el servicio. Ve mi código: App.module.ts:
import { WorkerData } from './Services/worker';
import {InMemoryWebApiModule } from 'angular-in-memory-web-api';
@NgModule({
imports: [ BrowserModule, HttpModule, ReactiveFormsModule, FormsModule,
RouterModule, routes, InMemoryWebApiModule.forRoot(WorkerData) ],
declarations: [ ... ],
providers: [ WorkerService],
bootstrap: [ AppComponent ]
})
export class AppModule { }
worker.ts:
import { Injectable } from '@angular/core';
import { InMemoryDbService,RequestInfo } from 'angular-in-memory-web-api';
export interface IWorker
{
id: number;
IDNumber: number;
FirstName?:string;
LastName?:string;
Email? : string;
DateOfBirth?: string;
PhoneNumber1?: string;
PhoneNumber2?: string;
Street1? :string;
Street2?: string;
City?: string;
Zip?:number;
General_Additional_Data?: string;
}
@Injectable()
export class WorkerData implements InMemoryDbService
{
createDb()
{
let workers =
[{
"id": 1,
"IDNumber": 289156,
"FirstName":"qqqqqq",
"LastName":"cccccc",
"DateOfBirth": "02/11/1991",
"PhoneNumber1": "3422-088808",
"PhoneNumber2":"3234-6321223",
"General_Additional_Data": "qqqqqqqqqqqqq"
},
{
"id": 2,
"IDNumber": 289157,
"FirstName":"aaaaaaa",
"LastName":"bbbbbbb",
"DateOfBirth": "05/11/1981",
"PhoneNumber1": "02328-08434348",
"PhoneNumber2":"052322-63213434",
"General_Additional_Data": "efefsdfsdfs"
},
{
"id": 3,
"IDNumber": 289466,
"FirstName":"aaaaa",
"LastName":"bbbbbb",
"DateOfBirth": "05/1/1991",
"PhoneNumber1": "0328-45634348",
"PhoneNumber2":"3232-7613434",
"General_Additional_Data": "aaaaaaaaaaaaaaaaa"
}];
return workers;
}
}
export class Worker implements IWorker{
constructor(
public id =-1,
public IDNumber = -1,
public FirstName?:string,
public LastName?:string,
public Email? : string,
public DateOfBirth?: string,
public PhoneNumber1?: string,
public PhoneNumber2?: string,
public Street1? :string,
public Street2?: string,
public City?: string,
public Zip?:number,
public General_Additional_Data?: string
){}
}
WorkerService.service (en la misma carpeta que el worker.ts mencionado arriba es):
import { Injectable } from '@angular/core';
import { Http, Response} from '@angular/http';
import { Observable } from 'rxjs/Observable';
import { IWorker, WorkerData } from './Services/worker';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/of';
@Injectable()
export class WorkerService
{
private _workerURL = 'api/workers';
constructor (private _http: Http){}
getWorkers(): Observable<IWorker[]>
{
return this._http.get(this._workerURL)
.map((response : Response) => <IWorker[]>
response.json())
.do(data => console.log('All: ' +
JSON.stringify(data)))
.catch(this.handleError);
}
Respuesta #1
Parece que has configurado incorrectamente el objeto que se devuelve desde createDb. La documentación indica que este objeto es un:
hash cuyas claves son nombres de colecciones y cuyos valores son arreglos de objetos de colección para devolver o actualizar.
En tu ejemplo, estás devolviendo un arreglo desde createDb, que es tu propia colección workers. En su lugar, necesitas devolver un objeto como se describe. es decir
return { workers: workers };
-o-
return { workers }; // Shorthand for the above.
