Nodejs リクエストをインターセプトする

王林
リリース: 2023-05-27 18:42:38
オリジナル
975 人が閲覧しました

Node.js は、巨大なエコシステムと活発なコミュニティを備えたオープンソース JavaScript ランタイム環境として人気が高まっています。その中でも、Node.js の HTTP モジュールはシンプルで使いやすいインターフェースを提供しており、非常に簡単に Web サーバーを作成できます。ただし、Web プログラムではリクエストをインターセプトする必要があることが多く、リクエストを処理する前に、リクエストのフィルター、検証、変更などを行う必要があります。このとき、リクエストのインターセプトを使用する必要があります。この記事では、Node.jsを使用してリクエストをインターセプトする方法を説明します。

1. リクエスト インターセプトとは何ですか?

リクエスト インターセプトとは、クライアントがサーバーへのリクエストを開始する前に、リクエストを変更またはフィルタリングする操作を指します。リクエスト パラメーターの検証や、リクエストのヘッダーの変更、リクエストのログの記録など。

2. リクエストのインターセプトが必要な理由

実際の開発では、リクエストのインターセプトが必要になることがよくあります。仕様: リクエストパラメータはクライアントとサーバー間の重要な橋渡しとなるため、リクエストパラメータが仕様に準拠していない場合、リクエストが正常に処理されなかったり、サーバーに脆弱性が発生してセキュリティ上の問題が発生したりする可能性があります。

    無効なリクエストをフィルタリングする: 無効なリクエストをインターセプトすると、サーバーへの負荷が軽減され、システムのパフォーマンスが向上します。
  1. リクエスト パラメータの変更: リクエストをインターセプトした後、リクエスト パラメータを変更して、期待される処理効果を達成できます。
  2. リクエスト ログの記録: リクエストをインターセプトすることでリクエスト ログを記録し、その後のシステム分析とデバッグを容易にすることができます。
  3. 3. リクエスト インターセプトの実装
Node.js でリクエスト インターセプトを実装するには、http モジュールで request イベントを使用する必要があります。

まず、http モジュールを導入する必要があります:

const http = require('http');
ログイン後にコピー

次に、HTTP サーバーを作成し、リクエスト イベントをリッスンしてリクエスト インターセプトを実装します:

http.createServer((req, res) => {
    // 请求拦截代码
    // ...
}).listen(8080, ()=>{
    console.log(`Server is running on port 8080`);
})
ログイン後にコピー

インターセプトの前にリクエスト。最初にリクエストパラメータを解析する必要があります。 Node.js にはリクエスト パラメーターを解析するクエリ文字列モジュールが付属しており、それを使用してリクエスト パラメーターを解析できます。例:

const queryString = require('querystring');

const postData = [];
req.on('data', chunk => {
    postData.push(chunk);
});

req.on('end', () => {
    const postParams = queryString.parse(Buffer.concat(postData).toString());
    console.log(postParams);
});
ログイン後にコピー

上記のコードは、リクエストのデータと終了イベントを監視し、POST リクエスト内のリクエスト パラメータを解析して出力できます。

次に、リクエストのインターセプトに関連するコードを記述します。

リクエスト パスのインターセプト

  1. リクエストされたパスは、req.url を通じて取得できます。パスが要件を満たしていない場合は、エラー メッセージを返すか、指定されたページにジャンプします。
たとえば、次のコードはパス /bad 内のすべてのリクエストをインターセプトし、エラー ページを返します。

if(req.url === '/bad') {
  res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
  res.write('<h1>出错了!</h1>');
  res.end();
}
ログイン後にコピー

Verify requestparameters

  1. usパラメータはリクエストパラメータを解析することで確認できます。パラメータが要件を満たしていない場合は、エラー メッセージを返すか、指定されたページにジャンプします。
たとえば、次のコードはパラメータにユーザー名が含まれていないすべてのリクエストをインターセプトし、エラー ページを返します。

const queryString = require('querystring');

const postData = [];
req.on('data', chunk => {
    postData.push(chunk);
});

req.on('end', () => {
    const postParams = queryString.parse(Buffer.concat(postData).toString());
    if(!postParams.username) {
        res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
        res.write('<h1>出错了!</h1>');
        res.end();
    }
});
ログイン後にコピー

リクエスト パラメータの変更

  1. us リクエスト パラメーターを変更して、目的の処理効果を実現できます。たとえば、次のコードはリクエスト パラメータのユーザー名を大文字に変換し、結果を返します:
  2. const queryString = require('querystring');
    
    const postData = [];
    req.on('data', chunk => {
        postData.push(chunk);
    });
    
    req.on('end', () => {
        const postParams = queryString.parse(Buffer.concat(postData).toString());
        postParams.username = postParams.username.toUpperCase();
        res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
        res.write(`<h1>您好,${postParams.username}!</h1>`);
        res.end();
    });
    ログイン後にコピー
    IV. 概要

    この記事では、リクエスト インターセプトとは何か、およびリクエスト インターセプトが必要な理由について紹介しました。リクエストインターセプトを使用します。同時に、パスのインターセプト、リクエスト パラメーターの検証、リクエスト パラメーターの変更など、Node.js を使用してリクエスト インターセプトを実装するための関連コードも提供します。実際の開発でリクエストをインターセプトする必要がある場合は、この記事のコードを参照して実装するとよいでしょう。

    以上がNodejs リクエストをインターセプトするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!