解析器中的Angular HttpClient问题

时间:2017-10-24 13:16:11

标签: node.js angular typescript angular-universal angular-router

使用Angular 2启用AOT编译(Angular universal),在自定义解析器中我收到错误..

  

未捕获(承诺):错误   错误:未捕获(在承诺中):错误

当我返回HttpClient调用的结果(这只是一个简单的数字)时,问题似乎是孤立的。

如果我关闭服务器端渲染,这一切都能正常工作。以下是代码的摘录。

constructor(private httpClient : HttpClient)
{

}

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): number | Observable<number> | Promise<number> {

    try{
        return this.httpClient.get<number>(`/api/something/getnumber`);
    }catch(e){
         console.log(e);              
    }
    return -1;
}

这是服务器端渲染中的一个基本问题吗?或者我只是缺少启用服务器端渲染所需的一些关键配置?

2 个答案:

答案 0 :(得分:1)

这与您获取非json数据的事实有关。将{responseType: 'text'}添加到您的调用中以指定此内容。

return this.httpClient.get<number>(`/api/something/getnumber`, {responseType: 'text'});

另请参阅文档Requesting non-JSON data

  

并非所有API都返回JSON数据。假设您要读取服务器上的文本文件。您必须告诉HttpClient您希望得到文本响应:

答案 1 :(得分:0)

尝试下面的代码就是我的例子:

@Injectable()
export class HomeActionResolve implements Resolve<any> {

    constructor(private http: Http) { }

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        try {
            return this.http.get('assets/json/sample.json');
        } catch (e) {
            console.log(e);
        }
        return -1;
    }
}

export const HomeRoute: Routes = [
    {
        path: '',
        component: HomeComponent,
        resolve: {
            'pagingParams': HomeActionResolve
        }
    }
];