Node はあいまい検索用の検索ボックスを実装します

Node はあいまい検索用の検索ボックスを実装します

この記事の例では、検索ボックスでファジークエリを実装するためのNodeの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

1. 需要

ナビゲーション バーの検索アイコンをクリックすると検索ボックスが表示され、記事のあいまい検索を実行できます。

2. テーブルを作成する

1.ブログテーブル

外部キーを追加します。

2. ナビゲーションテーブル

3.タイプテーブル

4.ユーザーテーブル

3. ページとスタイル

like.ejs:

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>クエリ</title>
    <link rel="スタイルシート" href="/css/bootstrap.min.css" >
    <link rel="スタイルシート" href="/css/index.css" >
    <script src="js/jquery-3.3.1.min.js"></script>
    <script src="js/index.js"></script>
</head>
<本文>
    <%-include('detachPart/nav.ejs')%>
    <%-include('detachPart/search.ejs')%>
    <div class="コンテナ">
        <div class="row">
            <div class="col-lg-9">
                <%-include('bigPart/ownblog.ejs')%>
            </div>  
            <div class="col-lg-3">
                <%-include('smallPart/recommend.ejs')%>
                <%-include('smallPart/rank.ejs')%>
                <%-include('smallPart/rightimg_1.ejs')%>
                <%-include('smallPart/information.ejs')%>
                <%-include('smallPart/mylink.ejs')%>
            </div>
        </div>
    </div>
    <%-include('detachPart/footer.ejs')%>
</本文>
</html>

検索.ejs:

<div class="コンテナ検索閉じる">
    <フォームアクション="/like" メソッド="GET">
        <input name="link" type="text" placeholder="キーワードを入力してください">
        <input type="submit" value="検索">
        <img class="closebtn" src="image/icon/close.png" alt="">
    </フォーム>
</div>

インデックス.css:

.検索閉じる{
    表示: なし;
    位置: 相対的;
    マージン: 0.5rem 自動;
    パディング: 1rem 0;
    テキスト配置: 中央;
    背景色: 白;
}
.searchclose 入力:n番目の子(1){
    幅: 25rem;
    高さ:2.2rem;
    アウトライン: なし;
    フォントサイズ: 0.9rem;
    左パディング: 0.5rem;
    境界線: 1px 銀色;
    ボックスのサイズ: 境界線ボックス;
    垂直位置合わせ: 中央;
}
.searchclose 入力:n番目の子(2){
    表示: インラインブロック;
    幅: 10rem;
    高さ:2.2rem;
    行の高さ: 2.2rem;
    背景色: rgb(41, 41, 41);
    色: 白;
    垂直位置合わせ: 中央;
    境界線: 1px実線rgb(41, 41, 41);
    境界線スタイル: なし;
    左マージン: -1rem;
}
.searchclose画像{
    位置: 絶対;
    上: 0;
    右: 0;
}

インデックス:

$(関数(){
    $(".searchbtn").click(function(){
        $(".searchclose").show();
    });
    $(".closebtn").click(関数(){
        $(".searchclose").hide();
    });
});

MySQL データ

接続.js:

var mysql = require("mysql");
var 設定 = require("./setting");
var 接続;
var connectionmysql=関数(){
    接続 = mysql.createConnection({
        ホスト:設定.ホスト、
        ポート:設定.ポート、
        ユーザー:設定.ユーザー、
        パスワード:setting.pwd、
        データベース:setting.base
    });
}
接続mysql(); 
exports.select = 関数 (str, コールバック) {
    接続mysql();  
    接続.クエリ(str,関数(err,res){
        if(err) errをスローします。
        コールバック(res);
        接続を終了します。  
    });
}   
exports.find = 関数 (str, パラメータ, コールバック) {
    接続mysql();  
    接続.クエリ(str,パラメータ,関数(err,res){
        if(err) errをスローします。
        コールバック(res);
        接続を終了します。  
    });
}

sql.js:

モジュール.エクスポート={
    findTitle:"ナビゲーションから*を選択",
    clickRank:"ブログから ID、タイトルを選択、数値、降順、制限 7 で並べ替え"、
    推奨情報:"推奨=1 の制限 8 のブログから ID、タイトル、ロゴ、推奨を選択"、
    likeBlog:"blog.id、title、intro、logo、time、type.typeinfo、user.face を blog、type、user から選択します。blog.type=type.id かつ blog.face=user.id で、title が like ですか? 時間降順で並べ替えます"
}

promise.js:

var mysql = require("../MySQL/connection");
var sql = require("../MySQL/sql");
モジュール.エクスポート={
    findTitle:関数(){
        新しいPromise(function(resolve){を返す
            mysql.select(sql.findTitle,function(結果){
                JSON.parse(JSON.stringify(結果)) を解決します。
            });
        })
    },
    クリックランク:関数(){
        新しいPromise(function(resolve){を返す
            mysql.select(sql.clickRank,function(結果){
                JSON.parse(JSON.stringify(結果)) を解決します。
            });
        });
    },
    推奨情報:関数(){
        新しいPromise(function(resolve){を返す
            mysql.select(sql.recommendInfo,function(結果){
                JSON.parse(JSON.stringify(結果)) を解決します。
            });
        });
    },
    いいねブログ:function(msg){
        新しいPromise(function(resolve){を返す
            mysql.find(sql.likeBlog,msg,function(結果){
                JSON.parse(JSON.stringify(結果)) を解決します。
            });
        });
    }
}

ルーター.js:

var promise = require("../MySQL/promise");
var url = require("url");
module.exports = 関数 (アプリ) {
    // あいまい検索用の検索ボックス app.get("/like",function(req,res){
        var likeurl=url.parse(req.url,true).query.link;
        非同期関数 getData(){
            var res1 = promise.findTitle() を待機します。
            var res5 = promise.clickRank() を待機します。
            var res11 = promise.recommendInfo() を待機します。
            var res21 = promise.likeBlog("%"+likeurl+"%") を待機します。
            var allres = {
                タイトルインデックス:0,
                navres:res1,
                ランク:res5,
                推奨res:res11,
                ブログres:res21
            }
            すべてを返す;
        }
        getData().then(function(result){
            res.render("like",結果);
        });
    });
}

注: ルートのblogres:res21やホームページのblogres:res10のように、ページにレンダリングされるデータ名は一貫している必要があります。ここではblogresです。

5. エフェクト表示

検索を実行します:

検索結果:

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MongoDB に基づく Node.js 検索ページングの例
  • Node.js は MongoDB データベースにファジークエリを実装します

<<:  Navicat を使用してリモート Linux MySQL データベースに接続するときに発生する 10061 不明エラーの詳細な説明

>>:  Ubuntu 18.0.4 は mysql をインストールし、エラー 1698 (28000): ユーザー ''root''@''localhost'' のアクセスが拒否されましたを解決します

推薦する

HTML テーブル マークアップ チュートリアル (2): テーブル境界属性 BORDER

デフォルトでは、テーブルの境界線は 0 ですが、テーブルの境界線を設定できます。基本的な構文<...

iframeを透明にするパラメータ

<iframe src="./ads_top_tian.html" all...

XHTML チュートリアル: Transitional と Strict の違い

実際、XHTML 1.0 は、Transitional DOCTYPE と Strict DOCTY...

JavaScript コードベースをよりクリーンにする 5 つの方法

目次1. 短絡や条件文の代わりにデフォルトのパラメータを使用する2. 複数の条件の処理3. スイッチ...

docker pull imageエラーの問題を解決する

説明する: Windows 10 に VM をインストールし、VM で Docker を実行し、Do...

MLSQLコンパイル時権限制御例の詳細な説明

序文MySQL の権限を簡単に理解すると、MySQL では自分の能力の範囲内で操作が許可され、その限...

MySQL 条件付きクエリと使用法および優先順位の例の分析

この記事では、例を使用して、MySQL 条件クエリ and or の使用方法と優先順位を説明します。...

MySQL 8.0.17 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.17のインストールと設定方法を参考までに紹介します。具体的な内容は...

ReactはExcelファイルのインポートとエクスポートを実装します

目次プレゼンテーション層ビジネスレイヤーコアプラグイン xlsx ExcelインポートExcelエク...

Win10+Ubuntu 20.04 LTS デュアル システム インストール (UEFI + GPT) (画像とテキスト、複数の画像には注意)

Win10 のインストール (すでにインストールされている場合はスキップしてください) win10...

MySQLでテーブル名を変更する方法と注意すべき点

目次1. テーブル名を変更する方法2. 注記要約: 1. テーブル名を変更する方法RENAME TA...

小さなアイコンのフロントエンド処理ソリューションのグラフィカルな説明

序文この記事を始める前に、複数選択の質問をしてみましょう。フロントエンド開発でビルド ツールを使用す...

Vueを使用して手書き署名機能を実装する

個人的な実装のスクリーンショット:インストール: npm インストール vue-esign --sa...

固定サイドバーを実現するためのJavaScript

固定サイドバーを実装するにはJavaScriptを使用します。参考までに、具体的な内容は次のとおりで...

nginx 設定場所方法の概要

位置一致順序1. 「=」プレフィックス命令マッチング、マッチングが成功したら他のマッチングを停止2....