angular - InMemoryWebApiModule - status: 404 - samling hittades inte
Jag försöker använda angular2 InMemoryWebApiModule och implementera InMemoryDbService för att skapa en mock-up av min backend-server. Jag konfigurerade det som (jag trodde) det skulle vara, men på något sätt kan jag inte nå datastrukturen som implementerar InMemoryDbService (WorkerData i worker.ts) och får hela tiden status 404 ("Collection 'workers' not found"). Jag har förenklat koden för att göra det tydligare. Detta är ett URL-problem - kan inte lista ut varför.
Problemet uppstår när man kör funktionen getWorkrs i tjänsten. Se min kod: 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 (i samma mapp som worker.ts ovan är):
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);
}
Svar #1
Det ser ut som om du har felkonfigurerat objektet som returneras från createDb. Dokumentationen anger att detta objekt är en:
hash vars nycklar är samlingsnamn och vars värden är arrayer av samlingsobjekt att returnera eller uppdatera.
I ditt exempel returnerar du en array från createDb, vilket är din workers-samling själv. Istället behöver du returnera ett objekt som beskrivs. dvs.
return { workers: workers };
-eller-
return { workers }; // Shorthand for the above.
