Node.js のフロントエンドとバックエンドのインタラクションによるユーザーログインの実装の実践

Node.js のフロントエンドとバックエンドのインタラクションによるユーザーログインの実装の実践

最近、Node.js のバックエンドの知識を少し学んだので、フロントエンドを勉強している者として、バックエンドを理解し始めました。さっそく、紹介を始めましょう。まず、このブログをより深く理解したい場合は、HTML、CSS、JavaScript、Node.js の基礎知識と、SQL データベースに関するちょっとした知識が必要です。次に、この小さなプロジェクトを開始します。

1. プロジェクト要件

ユーザーはログインインターフェースに入り、ユーザー名とパスワードを入力する必要があります。バックエンドはユーザーが入力したフォーム情報を取得し、データベースを検索します。正しい場合は、ログイン成功ページにジャンプします。

追伸: コメントは非常に詳細です。分からないことがあればコメントを読んでください。もちろん、質問するためにメッセージを残していただくことはできますが、これは問題の迅速な解決にはなりません。

次にコーディングを始める

1. フロントエンドページを作成する(CSSスタイルはここでは省略)

<フォームメソッド="post" アクション="http://localhost:8080/">
                <input type="text" required="必須" id="use_name" placeholder="ユーザー名を入力してください" name="user_name">
                <input type="password" required="必須" id="pwd" placeholder="パスワードを入力してください" name="user_pwd">
            <button type="submit" class="but">ログイン</button>
</フォーム>

ローカル テスト環境を実行しているため、フォームを作成し、投稿送信メソッドを使用して、アドレスを独自のホストに送信します。

ログイン成功ページ success.html

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <title>ログイン成功ページ</title>
    <スタイル>
        /*成功ページのスタイル*/
        。成功 {
            テキスト配置: 中央;
            色: #3e8e41;
        }
    </スタイル>
</head>
<本文>
<h1 class="success">おめでとうございます!ログインに成功しました! </h1>
<img src="img/keyboard_coffee.jpg">
</本文>
</html>

2. Node.jsバックエンドがユーザー入力データを取得する

(1)モジュールをインポートします。コンピュータにNode.jsがインストールされている必要があります。インストール手順については、Baiduで検索してください。

// http モジュールをインポートします。const http = require('http');
//リクエストパラメータ処理モジュールを導入します。const queryString = require('querystring');
定数 fs = require('fs');
//サードパーティの MIME モジュールを導入する const mime = require('mime');
定数パス = require("パス");

(2)ユーザー入力データの取得

// サーバー Web サイトのサーバー オブジェクトを作成します。let sever = http.createServer();
//リクエストイベントをサーバーオブジェクトにバインドし、sever.on('request', function (request, response) {をトリガーします。
    /* POST パラメータはイベント経由で受信されます* data はリクエストパラメータが渡されたときにトリガーされるイベントです* end はパラメータの受け渡しが完了したときにトリガーされるイベントです*/
    let postParams = ''; //投稿パラメータを受け取るための空の文字列を定義する //イベントをトリガーするためにデータをバインドする request.on('data', function (params) {
        postParams = postParams + params; // 投稿パラメータを連結します });
//トリガーイベントにデータをバインドする request.on('end', function () {
        // querystring モジュールの parse() メソッドを使用して postParams 文字列をオブジェクトに処理します // console.log(queryString.parse(postParams));
        //ユーザー名などの特定の値を取得します。 注意: ここでの user_name は、フロントエンド HTML コードの name="user_name" と一致している必要があります。
        username = queryString.parse(postParams).user_name とします。
        userpwd = queryString.parse(postParams).user_pwd とします。
}

これまでに、ユーザーが入力したデータを取得し、定義した変数 username と userpwd に保存しました。これらは、以下のデータベースから取得されたユーザー名とパスワードと比較するために使用されます。

(3)SQLデータベースからユーザー情報を取得します(私はMySQLデータベースを使用しています。データベース管理ソフトウェアはDBeaverを使用しています。無料なので笑)

事前に用意しておいたデータベース内のデータテーブルを見てみましょう。データベース名はtest(後でデータベースパッケージの設定項目で確認できます)、データテーブル名はuserinfoです。

// データベースクエリインスタンス。ユーザー名に基づいてデータベースを検索します。
//カスタムのカプセル化されたリンク データベース モジュールを呼び出します。const connection = require("./mysql.js");
connection.query("userinfo から * を選択、userName=?"、[ユーザー名]、function (結果、フィールド) {
            //result は MySQL クエリによって返された生データです。 '? ' は、SQL クエリ ステートメントを '[]' 内の値に置き換えるために使用されるプレースホルダーです。
            //MySQL から返された JSON のような配列を JSON データに処理します。let resultJson = JSON.stringify(result);
            //JSON.parse() は JSON 文字列を解析するために使用されます。let dataJson = JSON.parse(resultJson);
            //解析後に特定の値を取得します。let name = dataJson[0].userName;
            pwd = dataJson[0].userPwdとします。
      //データベースから取得したユーザー情報とユーザーフォームの入力を比較します。一致している場合は、成功したページにジャンプします。findPage() はカスタムページジャンプ関数です。if (pwd === userpwd && name === username) {
                console.log("パスワードは正しいです!");
                findPage('/success.html', レスポンス);
            } それ以外 {
                console.log("パスワードが間違っています!");
                response.end('<h1>パスワードが間違っています!</h1>')
            }
        });
/**
 * ローカルの静的リソースにアクセスする関数 */
関数 findPage(url, res) {
    // static は連結された静的リソースの絶対パスです。const static = path.join(__dirname, url);
    // ローカルファイルを非同期に読み取ります // ファイルタイプを取得するには、mime モジュールの getType() メソッドを使用します let fileType = mime.getType(static) // ファイルタイプを取得するには、mime モジュールの getType() メソッドを使用します // ファイルを読み込みます fs.readFile(static, function (err, result) {
        もしエラーが起きたら
            res.end(結果);
        }
        
    });
}

(4)データベースモジュールのカプセル化

データベースリンクなどの操作を毎回記述すると冗長になってしまうので、他のブロガーさんのコードを参考にして、データベースリンクの操作を 2 つのファイルにカプセル化しました。

データベース構成カプセル化ファイル mysql.config.js

//リンクデータベースパラメータを設定する module.exports = {
    ホスト: 'localhost',
    port: 3306, //ポート番号 database: 'test', //データベース名 user: 'root', //データベースユーザー名 password: '123456' //データベースパスワード };

データベースリンクカプセル化ファイル mysql.js

let mysql = require('mysql'); //mysqlモジュールを導入する let databaseConfig = require('./mysql.config'); //データベース設定モジュールにデータを導入する //メソッドを外部に公開する module.exports = {
    クエリ: 関数 (sql、パラメータ、コールバック) {
        // 使用するたびに接続を作成し、データ操作が完了したら接続を閉じる必要があります。let connection = mysql.createConnection(databaseConfig);
        接続.connect(関数(エラー) {
            もし(エラー){
                console.log('データベース接続に失敗しました');
                エラーをスローします。
            }
            //データ操作を開始します //3つのパラメータを渡します。最初のパラメータはSQL文、2番目のパラメータはSQL文に必要なデータ、3番目のパラメータはコールバック関数です connection.query(sql, params, function (err, results, fields) {
                もし(エラー){
                    console.log('データ操作に失敗しました');
                    エラーをスローします。
                }
                // クエリされたデータをコールバック関数に返します callback && callback(results, fields);
                //results はデータ操作の結果、fields はデータベース接続のいくつかのフィールドです //データベースへの接続を停止するには、ステートメントをクエリする必要があります。そうしないと、このメソッドが呼び出されると、接続が直接停止され、データ操作が失敗します connection.end(function (err) {
                    もし(エラー){
                        console.log('データベース接続を閉じることができませんでした!');
                        エラーをスローします。
                    }
                });
            });
        });
    }
};

上記の 2 つのファイルは、データベース クエリの例 const connection = require("./mysql.js"); で呼び出されています。

ここまでで、node.js を使って MySQL データベースをクエリし、ユーザーログイン機能を実現する機能が完成しました。データベース操作のカプセル化を教えてくれたブロガーに感謝したいと思います。彼の記事のリンクはこちらです。

Node.js フロントエンドとバックエンドのインタラクションによるユーザーログインの実装方法については、これで終わりです。Node.js ユーザーログインに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Node.js は Express を使用してユーザー登録とログイン機能を実装します (推奨)

<<:  将来最も成功する企業はテクノロジー企業でしょうか、それともデザイン企業でしょうか?

>>:  MySQL インデックスの最適化: ページング探索の詳細な紹介

推薦する

CentOS7 のシステム サービスに Nginx を追加する方法

導入コンパイル、インストール、問題の解決後、Nginx は正常に動作していますが、現時点では Ngi...

HTMLからPDFへのスクリーンショット保存機能の実装

テクノロジーの活用itext.jar: バイト ファイル入力ストリームを画像、PDF などに変換しま...

CentOS での mysql5.7 の詳細なインストールと設定のチュートリアル

インストールユーザーにインストール権限があることを確認してくださいルートスイッチなしsuルート(su...

Linux で特定のプログラムを見つけるための whereis の例の詳細な説明

Linuxは特定のプログラムを見つけますwhereis コマンドは主にプログラム ファイルを検索し、...

CUDA10.0 のインストールと Ubuntu での問題

Tensorflow バージョンと Cuda および CUDNN の対応: https://tens...

CocosCreator MVCアーキテクチャの詳細な説明

概要この記事では、ゲームクライアントでよく使用される MVC アーキテクチャについて紹介します。ゲー...

React Router V6 のアップデート

目次ReactRouterV6 の変更1. <Switch> が <Routes&...

Dockerでrabbitmqをデプロイする際に発生した2つの問題

1. 背景DockerでRabbitMQをデプロイする際に、次の2つの問題が発生します。問題1: ス...

動的画像読み込み技術の応用とjquery.lazyloadプラグインの使用例

アプリケーション例ウェブサイト http://www.uhuigou.net画像の動的読み込みは目新...

ボタンの 4 つのクリック応答方法の概要

ボタンは頻繁に使用されます。ここでは、イベント処理メソッドを整理し、実装方法が多数あることを発見しま...

CSS の記述基準と順序を共有する [すべての人に使用を推奨]

CSSの記述順序1. 位置属性(位置、上、右、z-index、表示、フロートなど) 2. サイズ(...

React を使って小さなプログラムを書くための Remax フレームワークのコンパイル プロセス分析 (推奨)

Remax は、実行時に構文制限のないソリューションを採用した React を使用して小規模なプロ...

Vue3 の SetUp 関数のプロパティとコンテキスト パラメータの詳細な説明

1. setUp関数の最初のパラメータpropsセットアップ(プロパティ、コンテキスト){}最初のパ...

プロジェクトに必須の 8 つの JavaScript コード スニペット

目次1. ファイル拡張子を取得する2. コンテンツをクリップボードにコピーする3. スリープ時間は何...

JQueryセレクターの詳細な説明

目次基本的なセレクター:レベルセレクター:属性セレクター:フィルターセレクター:フォーム属性セレクタ...