当用户试图在数据库中搜索患者时,我试图在消息框中显示后端错误。当我收到错误(没有发现患者错误(时,消息正文会立即出现,但除非单击两次搜索按钮,否则消息本身不会显示。
这是后端
router.get('/', async (req, res) => {
const filter = handleQueryFilter(req.query.filter)
const sort = handleQuerySort(req.query.sort)
const dataDisplayed = handleQueryProjection(req.query.data)
let patients = await Patient.find(filter,dataDisplayed).sort(sort);
return Object.entries(patients).length === 0 ? res.status(404).json(`Sory we could not find what you are looking for`) : res.json(patients)
})
html:
<div class="message" *ngIf="errorNoResultPage">
<div class="msgBody">
<i *ngIf="errorNoResultPage" class='bx bx-tired'></i>
<p *ngIf="errorNoResultPage" >{{message}}</p>
</div>
</div>
ts:
onSearch(search:any){
let p = this.patientList.filter(p=>p.name.toLocaleLowerCase() == this.searchVlaue.toLocaleLowerCase())
this.errorNoResult(p)
}
errorNoResult(patient:any){
if(patient=== undefined){
this.errorNoResultPage= true
}
else{
if(Object(patient).length <=0){
this.patientList=[];
this.errorNoResultPage=true
this.PatientService.getPatients().subscribe(res=> console.log(res),err => {
console.log(err);
this.message = err;
});
}
else{
this.errorNoResultPage = false
}
}
这是我的服务文件:
getPatients(): Observable<Patient[]> {
this.showNoResult = false
var filterPram = this.activatedRoute.snapshot.queryParams['filter'] ;
var sortPram = this.activatedRoute.snapshot.queryParams['sort'];
var queryParams: Params = {sort:sortPram ,filter:filterPram };
console.log(queryParams);
return this.http.get<Patient[]>(`${this.dataUri}`,
{
params:
queryParams
}).pipe(catchError(this.handleError))
}
编辑:当我控制台记录错误时,它会立即出现。
我弄清楚我的代码有什么问题。
在服务文件中,我正在寻找查询参数来进行筛选和排序。
因此,在ts中,在检查服务文件返回的任何错误之前,我必须设置查询参数。
我刚刚在路由器导航中添加了.then(()=>this.errorNoResult(p))
,如下所示:
this._router.navigate(['/dashboard','patients'],{queryParams:{
filter : this.queryParams,
sort:sortPram
}} ).then(()=>this.errorNoResult(p))