如何使用 Angular 内存 (in-memory) 服务器
在前后端分离开发中,一般在功能开发前,前端人员与服务端会制定相关的api,制定好它返回数据格式,定好后我们就可以快速的建立一个内存服务器了。 举个例子吧,我们需要一个这样的数据结构 数据模型: // person.model.ts class Person { id: string; name: string; dept: string; } 通常返回的JSON是这样: { "data": [ { "id": "0001","name": "岁寒③友","dept": "IT部" },{ "id": "0002","name": "老王",{ "id": "0003","name": "小张","dept": "行政部" } ] } 首先我们需要安装angular-in-memory-web-api,输入 npm install --save angular-in-memory-web-api 然后你的文件夹下创建一个文件: // srcappmymy-data.ts import { InMemoryDbService } from 'angular-in-memory-web-api'; import { Person } from './person.model'; export class InMemoryPersonDbService implements InMemoryDbService { createDb() { let persons: Person[] = [ { "id": "0001","dept": "IT部" },{ "id": "0002",{ "id": "0003","dept": "行政部" } ]; return {persons}; } } 要实现InMemoryDbService的内存数据,这个数据库其实也就是把数组传入。 // app.module.ts import { HttpModule } from '@angular/http'; import { InMemoryWebApiModule } from 'angular-in-memory-web-api'; import { InMemoryPersonDbService } from '../app/my/my-data'; @NgModule({ imports: [ HttpModule,InMemoryWebApiModule.forRoot(InMemoryPersonDbService),... ],... }) export class AppModule { ... } 接下来比较重点了 // service.ts import { Injectable } from '@angular/core'; import { Http,Headers } from '@angular/http'; import { UUID } from 'angular2-uuid'; import 'rxjs/add/operator/toPromise'; import { Person } from './person.model'; @Injectable() export class PersonService { private api_url = 'api/persons'; //这里是重点* private headers = new Headers({'Content-Type': 'application/json'}); constructor(private http: Http) { } // POST /persons addPerson(name:string,dept:string): Promise<Person> { let person = { id: UUID.UUID(),name: name,dept: dept }; return this.http .post(this.api_url,JSON.stringify(person),{headers: this.headers}) .toPromise() .then(res => res.json().data as Person) .catch(this.handleError); } private handleError(error: any): Promise<any> { console.error('An error occurred',error); return Promise.reject(error.message || error); } } 重点:上面的代码我们看到定义了一个 api_url = 'api/persons'; 这个地址到底需要如何声明?
这样的话我们改写成 api_url = 'app/mydata' 最后简单说下说下RESTful API中就是以“名词”来标识资源, 查询所有成员:以GET方法访问api/persons 关于in-memory更多可以阅读: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |