私はAngularを初めて利用しており、すべてのコンポーネントのサービスを作成しています。このサービスは、サーバーからデータをフェッチするために使用されます。角度で共通のHTTPサービスを作成する
私のクライアントが要求をオフラインに保存して後で同期するように指示しなくなるまで、すべてうまくいきました。
ここでは、サーバーに接続して既存のコンポーネント接続サービスではなくデータを取得する共通サービスを作成しました。
これがプロジェクトに影響するかどうかを知りたかったのですが、
この方法で問題が解決しない場合は、CommonRequestService
でネットワーク接続を確認し、その要求をDBに保存します。
以下のコードを確認して元に戻してください。私は非常に感謝しています。 CommonRequestServiceが使用されている。ここエンジニアステータスサービス
export class engineerStatusService {
constructor(public http: Http) {}
// Post data to the server if user update the status
post(path: string, body: Object = {}): Observable <any> {
let headers = new Headers({
'Content-Type': 'application/x-www-form-urlencoded',
'authorization': 'Bearer ' + localStorage.getItem('token')
});
let options = new RequestOptions({
headers: headers
});
let data = body;
let urlSearchParams = new URLSearchParams();
for (var key in body) {
urlSearchParams.append(key, body[key]);
}
let bodyData = urlSearchParams.toString();
return this.http.post(`${API_URL}${path}`, bodyData, options)
.map(response => response.json());
}
}
更新エンジニアステータスサービス
古いです。
export class engineerStatusService {
constructor(private commonRequestService: CommonRequestService) {}
// Post data to the server if user update the status
post(path: string, body: Object = {}): Observable <Response> {
let data = body;
let urlSearchParams = new URLSearchParams();
for (var key in body) {
urlSearchParams.append(key, body[key]);
}
let bodyData = urlSearchParams.toString();
return this.commonRequestService.post(path, bodyData)
.map(response => response.json())
}
}
CommonRequestService
export class CommonRequestService {
constructor(private http: Http) {}
post(path: string, body: Object = {}): Observable <Response> {
let headers = new Headers({
'Content-Type': 'application/x-www-form-urlencoded',
'authorization': 'Bearer ' + localStorage.getItem('token')
});
let options = new RequestOptions({
headers: headers
});
return this.http.post(`${API_URL}${path}`, body, options)
}
}
エンジニア状況コンポーネント
updateStatus(data) {
this.engineerStatusService
.post('status', data)
.subscribe(data => {
console.log(JSON.stringify(data));
}, error => {
console.log('Error occured =>', error);
})
}
[HTTPインターセプタ]リンクは、[サービスワーカー]リンクのみを開きます。 重要なことは、一度データが取得されると、ユーザーはオフラインモードでデータのアクティビティを実行できます。キャッシングは不要です。私は、要求とボディデータをデータベースのキューに保存することを考えています。後でネットワークが利用可能になるとき。すべてのデータをキューからサーバーに送信できます。 私の主な質問は、彼らが大丈夫か何か問題があるかどうかにかかわらず、私が行った変更です。助けてください! – Jassi
申し訳ありませんが、古いキーボード、私はその問題を編集しました。あなたが尋ねるものは、インターセプタではまだ可能です!あなたのコードについてはわかりませんが、動作しているかどうかをテストする必要があります。 – trichetriche
テストすることができれば素晴らしいと思います。私は今のところ、多くのリワークをしたくありません。これはAngularの私の最初のプロジェクトです。次のプロジェクトでは、サービスワーカーとHttpインターセプタがどのように機能するかを見ていきます。しかし、当分の間、私のコードをチェックして、進めていいかどうかを教えてください。 – Jassi