我与param进行了api通话:
public getPersonName(id: number): Observable<Person> {
let searchParams: URLSearchParams = new URLSearchParams();
searchParams.append("id", id.toString());
// my http call is down here ...
}
我的模拟看起来像这样:
public handleRequest(connection: MockConnection): void {
let request: Request = connection.request;
// Used in Expedite
if (request.method === RequestMethod.Get && new RegExp('\/person').test(request.url)) {
setTimeout(() => {
connection.mockRespond(new Response(
new ResponseOptions({
status: 200,
headers: new Headers(MY_HEADERS),
body: {
"fname": "John",
"lname": "Deer",
"age": 25
}
})
));
}, 1000);
}
}
但我想要的实际上是根据id返回一个不同的json ...所以如果id是5325我想返回一个json结果,如果id是4545我想返回一个不同的json ... < / p>
我该怎么做?
感谢@!
答案 0 :(得分:0)
我认为您的handleRequest
功能正在传递给mockBackend.connections.subscribe()
。
在这种情况下,您可以使用RxJS的强大功能来帮助您 您可以过滤发出的连接并以不同方式回复它们。
作为奖励,您甚至不需要使用setTimeout
,因为RxJS还为您提供延迟操作符。
mockBackend.connections
.filter(({ request }) => request.method === RequestMethod.Get && request.url === '/person/123')
.delay(1000)
.subscribe(conn => {
// Respond for person 123
conn.mockRespond({});
});
mockBackend.connections
.filter(({ request }) => request.method === RequestMethod.Get && request.url === '/person/456')
.delay(1000)
.subscribe(conn => {
// Respond for person 456
conn.mockRespond({});
});
答案 1 :(得分:0)
找到了当前结构的简单解决方案:
if (request.method === RequestMethod.Get && new RegExp('\/person').test(request.url) && req.url.endsWith('123'))