我试图仅从数据库中获取特定项目,然后将其显示在表中。
这是我的sql查询的样子
public async aliasesListByDomain(req: Request, res: Response): Promise<void> {
const { domain } = req.params;
const aliases = await pool.query('SELECT * FROM virtual_aliases INNER JOIN virtual_domains ON virtual_aliases.domain_id = virtual_domains.id WHERE virtual_aliases.domain_id = ?', [domain]);
if (aliases.length > 0) {
res.json(aliases);
} else {
res.status(404).json({ message: "Alias doesn't exists" });
}
}
有我的Aliases.service
getAliasesByDomain(domain: string): Observable<Alias> {
return this.http.get(`${this.API_URI}/aliases/aliaseslistbydomain/${domain}`);
}
还有我的组件
getAliasesByDomain() {
const token = this.getToken();
let user;
let domain;
console.log(token);
if(token){
user = token.split('.')[1];
user = window.atob(user);
user = JSON.parse(user);
domain = user.domain;
}
this.aliasesService.getAliasesByDomain(domain).subscribe(
res => {
this.alias = res;
},
err => console.error(err)
);
}
和组件html
<tr *ngFor="let aliases of alias;">
我的问题是我遇到了错误:
AliasesListComponent.html:17错误错误:找不到其他 支持对象的别名:[object object],[object Object] 输入“字符串”。 NgFor仅支持绑定到Iterables,例如 数组。
因为我的响应是Object对象而不是array。我该如何解析?
答案 0 :(得分:1)
如果您的回调函数为您提供了一个数组,您可以像这样在服务内部指定它
getAliasesByDomain(domain: string): Observable<Alias[]> {
return this.http.get<Alias[]>(`${this.API_URI}/aliases/aliaseslistbydomain/${domain}`);
}
答案 1 :(得分:0)
如果服务器的响应与您期望的数据模型不匹配,则可以使用rxjs转换响应。
import { map } from 'rxjs/operators';
getAliasesByDomain(domain: string): Observable<Alias[]> {
return this.http.get(`${this.API_URI}/aliases/aliaseslistbydomain/${domain}`).pipe(
map((response: any) => {
return transform(response);
})
);
}
transform(response: any): Alias[] {
// your translation logic here
}