[英]Angular validator to check availability
我正在以角度創建一個反應式表單來注冊一些設備。 在這個表格中,我要求一個序列號,我想檢查這個序列號是否已經在我的數據庫中注冊。
當我在輸入表單中輸入時,它會激活函數 serialNumAvailability 以顯示或不顯示消息。 這個函數調用一個名為 checkSerialNumAvailability 的服務函數,它向我的后端發送一個 get 請求。 我做了一些console.log 並使用Postman 來測試get 請求,它在后端似乎工作正常。 但是此刻我在輸入欄中輸入一個字符,我回到我的主頁,我不明白為什么......
這是我的 HTML 模板驗證:
<input formControlName="serialNum" type="text" class="form-control" placeholder="Ex: SL07101-BL" name="serialNum" required>
<div *ngIf="f.submitted " class="help-block mt-2 text-danger" i18n> Serial Number is required</div>
<div *ngIf="serialNum?.value.errors.serialNumAvailability" i18n> Serial Number already registered</div>
然后我的組件函數 serialNumAvailability :
serialNumAvailability(control: FormControl) {
return Observable.timer(500).switchMap(() => {
return this.portalService.checkAvailabilitySerialNum(control.value)
.map(res => {
if (res && res.length == 1 && res[0].serialNum) {
console.log("ON RENVOIE TRUE");
return { serialNumAvailability: true};
}
console.log("ON RENVOIE NULL");
return null;
});
});}
我的服務功能:
checkAvailabilitySerialNum(term: string): Observable<Portal[]> {
let portals: Portal[];
if (!term.trim()) {// if search is empty
return Observable.of([]);
}
return this.http.get<Portal[]>(this.serverURL + `portal/?serialNum=${term}`)
.map(Portals => Portals.filter(portals => portals.serialNum === term)
);
}
最后是節點端:
router.get('/',
function (req, res) {
console.log("ON RENTRE BIEN DANS LA FONCTION : " + req.query.serialNum);
return models.portals.findAll({
attributes: ['serialNum'],
where: {
serialNum: req.query.serialNum
}
}).then((serialNums) => {
if (serialNums) {
serialNums = serialNums.map((serialNum) => {
serialNum = serialNum.toJSON();
console.log(serialNum);
return serialNum;
})
}
console.log("ON FAIT RES.SEND DE "+serialNums);
res.send(serialNums);
})
})
我不知道為什么我被重定向,如果有人遇到這個問題,感謝支持:)
最后問題解決了。 重定向是由於處理我的請求的令牌攔截器。 由於它未被授權獲取信息,我只是為我的 URL 向這個攔截器添加了一個例外。
這看起來像這樣:
if (req.headers.has(this.config.InterceptorSkipHeader)) {
let headers = req.headers.delete(this.config.InterceptorSkipHeader);
return next.handle(req.clone({ headers }));
}
if(this.authenticationService.isLoggedIn()){
this.authenticationService.updateExpiration();
}
else if (this.router.routerState.snapshot.url != "/register-portal"){
this.router.navigate(['/login'], { queryParams: { returnUrl: ''} });
}
感謝那些回答:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.