JavaScript レートフェッチ関数のエラーを解決する方法
JavaScript は、Web 開発、特に外部 API を使用する場合に効果的なツールです。ただし、経験豊富な開発者でも、API からデータを取得する関数を作成するときによくある間違いを犯します。このような問題の 1 つは、関数に引数を送信し、応答として未定義の値を取得しようとしたときに発生します。
この記事では、2 つの通貨間のビットコイン レートを取得する JavaScript 関数を作成する際の難しさについて説明します。 「参照エラー: btc が定義されていません」という問題は、パラメータや変数の指定が間違っていることが原因で発生することがよくあります。コードが正しく構造化されていれば、これらの問題を回避できます。
という名前の関数を作成する方法を説明します。 おろし金(から、まで)、2 つのパラメーターを受け入れ、2 つの通貨間の為替レートを返します。この本を読み終えるまでに、引数を適切に渡し、データ取得プロセス中にエラーを管理する方法がわかるようになります。
同様の問題が発生している場合、または「未定義のプロパティを読み取れません ('rate' を読み取っています)」というエラーが表示された場合、この記事は問題のトラブルシューティングと効果的な解決に役立ちます。これらの問題を解決する方法を段階的に見てみましょう。
指示 | 使用例 |
---|---|
XMLHttpRequest() | このコンストラクターは、ネットワーク要求を行うための XMLHttpRequest のインスタンスを生成します。これは、特に Fetch を使用しない古い Web プロジェクトで、非同期 HTTP クエリに広く使用されています。 |
open('GET', URL, true) | の 開ける() メソッドは、リクエストのタイプ (この場合は GET)、ターゲット URL、およびリクエストが非同期 (true) かどうかを定義します。 |
オンロード | これは、リクエストが正常に完了したときに起動される XMLHttpRequest のイベント ハンドラーです。すべてのデータを受信したら、応答を処理できます。 |
フェッチ() | の フェッチ() function は、ネットワーク要求を行うための、より現代的で汎用性の高い方法です。これは Promise を返し、最新の JavaScript で非同期 API 呼び出しを行うためによく使用されます。 |
応答.json() | このメソッドは、API から返された応答を JavaScript オブジェクトに変換します。これは主に、API の一般的な形式である JSON データを操作するために設計されています。 |
非同期/待機 | の 非同期 キーワードにより関数は Promise を返しますが、 待つ Promise が解決されるまで実行を停止します。これにより、非同期コードの処理が容易になります。 |
トライ/キャッチ | try/catch ブロックは間違いを適切に処理します。 API 呼び出しを使用する場合、ネットワークの問題や不適切なデータによってスローされた例外をキャッチすると便利です。 |
http.get() | Node.js関数 http.get() GET リクエストをサーバーに送信し、応答を処理します。これは、バックエンド Node.js アプリケーションで HTTP リクエストを行うために不可欠です。 |
冗談フェッチモック | 単体テストでフェッチ クエリをモックするための特定の Jest テスト ユーティリティ。これにより、外部 API 呼び出しに依存するメソッドを、その応答を模倣してテストできます。 |
JavaScript 関数が暗号通貨レートの API リクエストを処理する方法を理解する
ここで提供されるスクリプトは、JavaScript を使用して 2 つの通貨間の暗号通貨為替レートを取得するための代替手法を示しています。最初のスクリプトは XMLHttpRequest オブジェクトを利用します。これは、JavaScript で非同期 HTTP リクエストを処理するための古い手法の 1 つです。機能 おろし金(から、まで) は、変換する通貨という 2 つのパラメータを受け入れます。 URL は指定されたパラメーターに基づいて動的に生成され、リクエストが Bitpay の API エンドポイントに送信されます。答えを取得した後、JSON.parse() を使用してデータが解析されます。 文書本文に為替レートを表示します。このソリューションは古いブラウザーとの互換性を維持しますが、2 番目の例で説明する Promise などのいくつかの新しい機能が欠けています。
2 番目の例では、XMLHttpRequest の代わりに Fetch API を使用して同じアクションを実行します。 Fetch API はより最新のものであり、ネットワーク リクエストを行うためのより簡単な方法を提供します。 Promise を活用して、非同期フローをより読みやすく、管理しやすくします。関数が呼び出されると、同じ URL に対して HTTP リクエストを作成し、応答を待ちます。レスポンスを取得後、データをJSONオブジェクトに変換してレートを取得します。 Fetch API は、try/catch ブロックを使用してリクエストまたはデータの処理中に発生する問題を収集および管理することにより、エラー管理を改善します。
3 番目のスクリプトは、 バックエンド環境 Node.js の HTTP モジュールを使用して API クエリを作成します。これは、為替レートを取得する必要があるサーバー側アプリを開発する場合に特に有益です。 HTTP モジュールは Node.js に組み込まれており、開発者は HTTP 操作を実行できます。この関数は、前のスクリプトと同じ方法で URL を作成し、API に GET 呼び出しを送信し、受信したデータを解析します。結果はブラウザに表示されるのではなくコンソールに記録されるため、Web ブラウザを必要としないバックエンド シナリオに適しています。
最後に、Fetch API ソリューションが適切に機能することを確認するための Jest テスト スイートが含まれています。 Jest は人気のあるテスト フレームワークであり、 冗談フェッチモック、テストで API 応答を模倣できます。これにより、開発者は実際にネットワーク クエリを生成せずにコードをテストできるため、テスト プロセスが高速化され、潜在的なバグが分離されます。テストでは、レート データが正常に取得されてドキュメント本文に表示されることを検証し、関数がさまざまなコンテキストで意図したとおりに実行されることを確認します。テストは開発の重要な要素であり、特に外部 API を使用する場合には、間違いを早期に検出し、製品全体の安定性を向上させるのに役立ちます。
JavaScript: 「ReferenceError: btc が定義されていません」問題の修正
フロントエンド環境では、このメソッドは JavaScript と XMLHTTPRequest を使用して動的データを取得します。
// Solution 1: Using XMLHTTPRequest to fetch cryptocurrency rates
function grate(from, to) {
var burl = 'https://bitpay.com/rates/';
var url = burl + from + '/' + to;
var ourRequest = new XMLHttpRequest();
ourRequest.open('GET', url, true);
ourRequest.onload = function() {
if (ourRequest.status >= 200 && ourRequest.status < 400) {
var response = JSON.parse(ourRequest.responseText);
document.body.innerHTML = 'Rate: ' + response.data.rate;
} else {
console.error('Error fetching the data');
}
};
ourRequest.onerror = function() {
console.error('Connection error');
};
ourRequest.send();
}
// Test the function with actual currency codes
grate('btc', 'usd');
JavaScript: Fetch API は、API リクエストを処理するためのより現代的なアプローチです。
このソリューションは、JavaScript と Fetch API を活用することで、最新のフロントエンド アプリのパフォーマンスと障害処理を向上させます。
// Solution 2: Using Fetch API for cleaner asynchronous requests
async function grate(from, to) {
var burl = 'https://bitpay.com/rates/';
var url = burl + from + '/' + to;
try {
let response = await fetch(url);
if (!response.ok) throw new Error('Network response was not ok');
let data = await response.json();
document.body.innerHTML = 'Rate: ' + data.data.rate;
} catch (error) {
console.error('Fetch error: ', error);
}
}
// Test the function with Fetch API
grate('btc', 'usd');
Node.js バックエンド: ノードの HTTP モジュールを使用した API リクエストの作成
このメソッドは、Node.js とバックエンド アプリケーションの HTTP モジュールを使用して通貨レートを取得します。
// Solution 3: Using Node.js HTTP module to fetch data from API
const http = require('http');
function grate(from, to) {
const url = 'http://bitpay.com/rates/' + from + '/' + to;
http.get(url, (resp) => {
let data = '';
resp.on('data', (chunk) => { data += chunk; });
resp.on('end', () => {
let rateData = JSON.parse(data);
console.log('Rate: ' + rateData.data.rate);
});
}).on('error', (err) => {
console.log('Error: ' + err.message);
});
}
// Test the Node.js function
grate('btc', 'usd');
Jest を使用したフロントエンド ソリューションの単体テスト
JavaScript Fetch API ソリューションの機能は、Jest で記述された単体テストを使用して検証されます。
// Solution 4: Unit testing Fetch API using Jest
const fetchMock = require('jest-fetch-mock');
fetchMock.enableMocks();
test('grate() fetches correct rate data', async () => {
fetch.mockResponseOnce(JSON.stringify({ data: { rate: 50000 }}));
const rate = await grate('btc', 'usd');
expect(document.body.innerHTML).toBe('Rate: 50000');
});
API リクエスト用の非同期 JavaScript 関数の探索
JavaScript で API を操作する場合、非同期リクエストの処理は非常に重要です。 Fetch API と XMLHttpRequest は、これらのリクエストを行うための 2 つの基本的な方法です。非同期関数の目的は、応答の待機中にブラウザまたはサーバーがフリーズするのを防ぎ、ユーザー エクスペリエンスとパフォーマンスを向上させることです。非同期動作を理解すると、開発者はメインスレッドに影響を与えることなく API からリアルタイムでデータを取得できる、より応答性の高いアプリケーションを構築できるようになります。
非同期リクエストを処理するには、レスポンスとプロセス中に発生する可能性のあるさまざまな間違いを管理する必要があります。たとえば、最初のケースのエラーで示されているように、外部 API からデータを取得するときによくある問題の 1 つは、未定義の値を返すことです。開発者が例外を効果的に管理できないと、アプリケーションがクラッシュしたり、不正確な結果が生成されたりする可能性があります。 try/catch ブロックや応答ステータス チェックなどの効果的なエラー処理が重要です。
外部 API と対話する場合、エラー処理に加えて、セキュリティも重要な考慮事項です。機密データを公開したり、検証せずに API への直接アクセスを許可したりすると、脆弱性が発生する可能性があります。解決策の 1 つは、サーバー側リクエストを実装することです。このリクエストでは API 呼び出しがバックエンド サーバーから行われ、追加のセキュリティが提供されます。これにより、悪意のある攻撃者がフロントエンド リクエストを妨害したり、ブラウザ経由で機密データを直接取得したりすることが禁止されます。これらの API 接続を保護することは、特にビットコイン レートなどの金融情報を扱う場合に重要です。
JavaScript を使用した API データの取得に関するよくある質問
- 違いは何ですか XMLHttpRequest そして Fetch API?
- どちらも HTTP クエリの送信に使用できますが、Fetch API の方が最新であり、インターフェイスがシンプルです。 Promise を採用しているため、非同期プロセスの処理が容易になります。
- を使用するときにエラーを処理するにはどうすればよいですか? Fetch API?
- エラーを処理するには、フェッチ リクエストを try/catch ブロックして応答ステータスを確認します。これにより、コードの障害に対する回復力が高まります。
- API からデータを取得しようとすると、未定義の値を受け取るのはなぜですか?
- これは通常、API エンドポイントまたは引数が正しくない場合、または応答が以下を使用して正しく処理されなかった場合に発生します。 JSON.parse()。
- 実際のネットワーク呼び出しを行わずに API リクエストをテストできますか?
- はい、次のようなライブラリを使用できます。 jest-fetch-mock Jest では、テスト用に API クエリと回答を模倣します。
- API リクエストのセキュリティを向上するにはどうすればよいですか?
- セキュリティを向上させる 1 つのオプションは、フロントエンドではなくバックエンド サーバーからリクエストを行うことです。これにより、重要な API キーが隠蔽され、悪意のある攻撃者からアプリケーションが保護されます。
API エラーとリクエストの処理に関する最終的な考え方
JavaScript で API 呼び出しを処理する方法を理解することは、動的アプリケーションの開発にとって重要です。 XMLHttpRequest や Fetch API などのテクノロジーを使用すると、開発者は暗号通貨の価格などのリアルタイム データを効果的に取得できます。ただし、未定義のプロパティなどの一般的な問題には適切に対処する必要があります。
適切なエラー処理とテスト手順を実装すると、コードの信頼性が高まります。フロントエンド アプリケーションを開発しているかバックエンド アプリケーションを開発しているかに関係なく、API 呼び出しを保護し、最新のアプローチを実装することで、より安全でパフォーマンスの高いオンライン ソリューションが実現します。
JavaScript API リクエスト処理のソースとリファレンス
- を使用して JavaScript で API リクエストを処理する方法について詳しく説明します。 XMLHttpRequest そして APIを取得する、JavaScript 非同期プログラミングに関する外部ガイドとドキュメントを参照します。訪問 MDN Web ドキュメント - XMLHttpRequest 。
- フロントエンド開発とバックエンド開発の両方におけるエラー処理と API リクエストの保護に関するベスト プラクティスが含まれています。参照: Node.js 公式ドキュメント - HTTP リクエスト 。
- Jest やモック ツールを使用した API 機能のテストに関する洞察を提供します。 冗談フェッチモック。詳細については、こちらをご覧ください Jest 公式ドキュメント 。