我使用Angular 5和HttpInterceptors
我已经知道我可以从HttpParams
via several methods获得我想要的每个值。
另外 - 如果我想查看所有值,我可以使用.toString()
方法
params = new HttpParams()
.set('page', '2')
.set('sort', 'name');
console.log(params.toString()); //Returns page=2&sort=name
但在我的情况下,我发送json对象作为参数:
{
a:1 , b:[1,2,3] , c:[{...}]
}
我使用拦截器来记录请求参数,但是当我JSON.stringify(req.Params)
时,我得到:
Params={
"updates": null,
"cloneFrom": null,
"encoder": {},
"map": {}
}
没有公开价值。
我没有希望将参数看作常规表单帖子参数 - (这将是非常不清楚的),但作为我发送它的对象。< / p>
问题:
如何从拦截器中的请求对象中提取参数,但是以json格式:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>
{
JSON.stringify( req.params) // <--- ?? doesn't yield the params.
}
答案 0 :(得分:2)
如果您不喜欢返回编码字符串的方法toString()
,其中键值对(由=
分隔)由&
分隔,您可以编写自己的方法这将在您想要使用的某些数据中转换存储在Map中的数据。
例如:
const params = new HttpParams()
.set('page', '2')
.set('sort', 'name');
const paramsArray = params.keys().map(x => ({ [x]: params.get(x) }));
console.log(JSON.stringify(paramsArray));
它类似于toString
方法中使用的方法
https://github.com/angular/angular/blob/master/packages/common/http/src/params.ts#L177-L186
<强> Ng-run Example 强>
答案 1 :(得分:0)
您实际要求的是JSON对象。所以这就是你得到这样一个对象的方式:
const params = new HttpParams()
.set('page', '2')
.set('sort', 'name');
const paramsObject = params.keys().reduce((object, key) => {
object[key] = params.get(key)
return object
}, {})
console.log(paramsObject)
// And json if you really want
const json = JSON.stringify(paramsObject)