ホームページ ウェブフロントエンド Vue.js Vue.js 学習 3: サーバーとのデータ対話

Vue.js 学習 3: サーバーとのデータ対話

Oct 14, 2020 pm 05:21 PM
vue.js

Vue.js チュートリアル コラムでは、今日の Vue.js 学習の 3 番目の部分であるサーバーとのデータ対話を紹介します。

Vue.js 学習 3: サーバーとのデータ対話

明らかに、以前の 02_toDoList には致命的な欠陥があります。つまり、そのデータはブラウザ側にのみ存在し、ユーザーがページを閉じるかリロードすると、以前にプログラムに追加したデータはすべて失われ、すべてがプログラムの初期状態に戻ります。この問題を解決するには、Web アプリケーションのフロントエンドがバックエンド サーバーで取得した入力データを適切なタイミングで保存し、必要に応じてサーバーからデータを取得する必要があります。メモのこの部分では、Vue.js フレームワークを使用して Web アプリケーションのフロントエンドとバックエンド間の対話を完了する方法を記録します。今回は、学習プロセス全体を実行する「ゲストブック」アプリケーションも構築します。

まず、code ディレクトリで npm install Express body-parser knexnpm install sqlite3@<specified version>## を実行する必要があります。 #Command で、Web サービスの作成に必要なバックエンド コンポーネントをインストールします (ここでインストールされる sqlite3 は、knex のインストール後のプロンプトに従って、対応するバージョンを選択する必要があることに注意してください) )。次に、code ディレクトリに 03_Message という名前のディレクトリを作成し、このディレクトリで npm init -y コマンドを実行して、Node.js プロジェクトに初期化します。 。ここで、サーバーに必要なコンポーネントをプロジェクトディレクトリの上位ディレクトリにインストールしているのは、フロントエンドコンポーネントもプロジェクトディレクトリにインストールし、ブラウザで開いてアクセスする必要があるためです。端末に必要なコンポーネントは個別に保管するのが最適です。

今度は、Express フレームワークに基づいて Web サービスを作成します。具体的な方法は、

code/03_Message ディレクトリに index.js という名前のサーバー側スクリプト ファイルを作成し、その中に次のコードを入力します。 Vue による .js フレームワークの特性 フロントエンドは、指定された HTML および JavaScript ファイルの取得に加えて、バックエンドによって提供されるサービスを必要とします。したがって、上記のサービスでは、public

node_modules に加えて、ディレクトリ全体がブラウザ アクセスに開かれていることに加えて、主に GET リクエストに基づくデータ クエリ サービスを提供します。 、および POST リクエストに基づく 2 つのデータ追加および削除操作。 次に、フロントエンド部分の構築を開始できます。まず、code/03_Message

ディレクトリで

npm install vue axios コマンドを実行して、次に使用するフロントエンド コンポーネントをインストールする必要があります (このコマンドにより、node_modules ディレクトリ。前述したように、ディレクトリはサーバー側スクリプトによって全体としてブラウザに開かれます)。次に、同じディレクトリ内に public ディレクトリを作成し、その中に次のコードを含む index.htm という名前のファイルを作成します。

const path = require('path');
const express = require('express')
const bodyParser = require('body-parser');
const knex = require('knex');
const port = 8080;

// 创建服务器实例
const app = express();

// 配置 public 目录,将其开放给浏览器端
app.use('/', express.static(path.join(__dirname, 'public')));
// 配置 node_modules 目录,将其开放给浏览器端
app.use('/node_modules', express.static(path.join(__dirname, 'node_modules')));

//配置 body-parser 中间件,以便获取 POST 请求数据。
app.use(bodyParser.urlencoded({ extended : false}));
app.use(bodyParser.json());

// 创建数据库连接对象:
const appDB = knex({
    client: 'sqlite3', // 设置要连接的数据类型
    connection: {      // 设置数据库的链接参数
        filename: path.join(__dirname, 'data/database.sqlite')
    },
    debug: true,       // 设置是否开启 debug 模式,true 表示开启
    pool: {            // 设置数据库连接池的大小,默认为{min: 2, max: 10}
        min: 2,
        max: 7
    },
    useNullAsDefault: true
});

appDB.schema.hasTable('notes')  // 查看数据库中是否已经存在 notes 表
.then(function(exists) {
    if(exists == false) { // 如果 notes 表不存在就创建它
        appDB.schema.createTable('notes', function(table) {
            // 创建 notes 表:
            table.increments('uid').primary();// 将 uid 设置为自动增长的字段,并将其设为主键。
            table.string('userName');         // 将 userName 设置为字符串类型的字段。
            table.string('noteMessage');      // 将 notes 设置为字符串类型的字段。
    });
  }
})
.then(function() {
    // 请求路由
    // 设置网站首页
    app.get('/', function(req, res) {
        res.redirect('/index.htm');
    });

    // 响应前端获取数据的 GET 请求
    app.get('/data/get', function(req, res) {
        appDB('notes').select('*')
        .then(function(data) {
            console.log(data);
            res.status(200).send(data);
        }).catch(function() {
            res.status(404).send('找不到相关数据');
        });
    });

    // 响应前端删除数据的 POST 请求
    app.post('/data/delete', function(req, res) {
        appDB('notes').delete()
        .where('uid', '=', req.body['uid'])
        .catch(function() {
            res.status(404).send('删除数据失败');
        });
        res.send(200);
    });

    // 响应前端添加数据的 POST 请求
    app.post('/data/add', function(req, res) {
        console.log('post data');
        appDB('notes').insert(
            {
                userName : req.body['userName'],
                noteMessage : req.body['noteMessage']
            }
        ).catch(function() {
            res.status(404).send('添加数据失败');
        });
        res.send(200);
    });

    // 监听 8080 端口
    app.listen(port, function(){
        console.log(`访问 http://localhost:${port}/,按 Ctrl+C 终止服务!`);
    });
})
.catch(function() {
    // 断开数据库连接,并销毁 appDB 对象
    appDB.destroy();
});
ログイン後にコピー
This page主に 2 つの部分に分かれており、最初の部分では v-for コマンドを使用して、

notes のデータに基づいてデータベースに追加されたコメントを繰り返し表示します。指定したメッセージを削除するには、「 Delete the 」ボタンを指定します (クリック イベント ハンドラー関数をバインドするには、v-on ディレクティブを使用します)。 2 番目の部分は、メッセージを追加するための入力インターフェイスです。ここでは、v-model コマンドを使用して、必要な userName を取得します。ユーザーが入力したメッセージデータ。次に、対応する Vue オブジェクト インスタンスを作成する必要があります。これを行うには、先ほど作成した public ディレクトリの下に別の js ディレクトリを作成し、その中に # という名前のディレクトリを作成します。 ##main.js のカスタム フロントエンド スクリプト ファイルには次のコードがあります: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;!DOCTYPE html&gt; &lt;html lang=&quot;zh-cn&quot;&gt; &lt;head&gt;     &lt;meta charset=&quot;UTF-8&quot;&gt;     &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;     &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;ie=edge&quot;&gt;     &lt;script defer=&quot;defer&quot; src=&quot;/node_modules/vue/dist/vue.js&quot;&gt;&lt;/script&gt;     &lt;script defer=&quot;defer&quot; src=&quot;/node_modules/axios/dist/axios.js&quot;&gt;&lt;/script&gt;     &lt;script defer=&quot;defer&quot; src=&quot;/js/main.js&quot;&gt;&lt;/script&gt;     &lt;title&gt;留言本&lt;/title&gt; &lt;/head&gt; &lt;body&gt;     &lt;p id=&quot;app&quot;&gt;         &lt;h1&gt;留言本&lt;/h1&gt;         &lt;p id=&quot;showNote&quot; v-for=&quot;note in notes&quot;&gt;             &lt;span&gt;{{ note.userName }} 说:{{ note.noteMessage }} &lt;/span&gt;             &lt;input type=&quot;button&quot; value=&quot;删除&quot; @click=&quot;remove(note.uid)&quot;&gt;         &lt;/p&gt;         &lt;p id=&quot;addMessage&quot;&gt;             &lt;h2&gt;请留言:&lt;/h2&gt;             &lt;label :for=&quot;userName&quot;&gt;用户名:&lt;/label&gt;             &lt;input type=&quot;text&quot; v-model=&quot;userName&quot;&gt;             &lt;br&gt;             &lt;label :for=&quot;Message&quot;&gt;写留言:&lt;/label&gt;             &lt;input type=&quot;text&quot; v-model=&quot;Message&quot;&gt;&lt;/input&gt;             &lt;input type=&quot;button&quot; value=&quot;添加留言&quot; @click=&quot;addNew&quot;&gt;         &lt;/p&gt;     &lt;/p&gt; &lt;/body&gt; &lt;/html&gt;</pre><div class="contentsignin">ログイン後にコピー</div></div>この Vue インスタンスは前に作成したものと似ており、主に次の 4 つのメンバーで構成されています:

el
    Member: CSS セレクターを使用して Vue インスタンスに対応する要素コンテナーを指定するために使用します。ここでは
  • 要素。

    data
  • メンバー: ページにバインドされたデータを設定するために使用されます。次の 3 つのデータ変数がここで設定されます:
  • notes

    : これは、追加されたメッセージ レコードを格納するために使用される配列変数です。
    • userName: これは、「ユーザー名」データを取得するために使用される文字列変数です。
    • Message: これは、「メッセージ」データを取得するために使用される文字列変数です。
    created
  • Member: プログラムのロード時の初期化に使用されます。ここでは、追加されたメッセージをサーバーから読み取り、記録して、
  • notes

    変数。

    メソッド
  • メンバー: ページにバインドされたイベント処理関数を定義するために使用されます。次の 2 つのイベント処理関数がここで定義されます:
    • addNew:用于添加新的留言记录,并同步更新notes中的数据。
    • remove:用于删除指定的留言记录,并同步更新notes中的数据。

通常情况下,我们在 Vue.js 框架中会选择使用 axios 这样的第三方组件来处理发送请求和接收响应数据的工作,引入该组件的方式与引入 Vue.js 框架的方式是一样的,可以像上面一样先下载到本地,然后使用<script>标签引入,也可以使用 CDN 的方式直接使用<code><script>标签引入,像这样:

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://unpkg.com/axios/dist/axios.js"></script>
<!-- 或者 -->
<!-- 生产环境版本,优化了文件大小和载入速度 -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
ログイン後にコピー

需要注意的是,该引用标签在 HTML 页面中的位置必须要在自定义 JavaScript 脚本文件(即main.js)的引用标签之前。当然,我在上述代码中只展示了axios.getaxios.post这两个最常用方法的基本用法,由于该组件支持返回 Promise 对象,所以我们可以采用then方法调用链来处理响应数据和异常状况。关于 axios 组件更多的使用方法,可以参考相关文档(http://www.axios-js.com/zh-cn/docs/)。

更多相关免费学习:javascript(视频)

以上がVue.js 学習 3: サーバーとのデータ対話の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

vite が .env ファイルを解析する方法についての詳細な説明 vite が .env ファイルを解析する方法についての詳細な説明 Jan 24, 2023 am 05:30 AM

Vue フレームワークを使用してフロントエンド プロジェクトを開発する場合、デプロイ時に複数の環境をデプロイすることになりますが、開発環境、テスト環境、オンライン環境で呼び出されるインターフェイス ドメイン名が異なることがよくあります。どうすれば区別できるでしょうか?それは環境変数とパターンを使用することです。

Ace コード エディターを Vue プロジェクトに統合する方法の詳細な図による説明 Ace コード エディターを Vue プロジェクトに統合する方法の詳細な図による説明 Apr 24, 2023 am 10:52 AM

Ace は、JavaScript で書かれた埋め込み可能なコード エディターです。 Sublime、Vim、TextMate などのネイティブ エディターの機能とパフォーマンスに匹敵します。あらゆる Web ページや JavaScript アプリケーションに簡単に埋め込むことができます。 Ace は Cloud9 IDE のメイン エディタとして維持されており、Mozilla Skywriter (Bespin) プロジェクトの後継です。

vue のコンポーネント化とモジュール化の違いは何ですか vue のコンポーネント化とモジュール化の違いは何ですか Dec 15, 2022 pm 12:54 PM

コンポーネント化とモジュール化の違い: モジュール化はコード ロジックの観点から分割され、コードの階層化された開発が容易になり、各機能モジュールの機能の一貫性が保証されます。コンポーネント化は UI インターフェイスの観点から計画され、フロントエンドのコンポーネント化により UI コンポーネントの再利用が容易になります。

実践的な戦闘: vue ファイルをサポートして定義にジャンプするプラグインを vscode で開発する 実践的な戦闘: vue ファイルをサポートして定義にジャンプするプラグインを vscode で開発する Nov 16, 2022 pm 08:43 PM

vscode 自体は、定義にジャンプするための Vue ファイル コンポーネントをサポートしていますが、そのサポートは非​​常に弱いです。 vue-cli の構成では、多くの柔軟な使用法を記述することができるため、制作効率が向上します。しかし、これらの柔軟な記述方法により、vscode 自体が提供する関数がファイル定義へのジャンプをサポートできなくなります。これらの柔軟な記述方法に対応し、作業効率を向上させるために、Vue ファイルの定義へのジャンプをサポートする vscode プラグインを作成しました。

vue3 の reactive() について詳しく話しましょう vue3 の reactive() について詳しく話しましょう Jan 06, 2023 pm 09:21 PM

前書き: vue3 の開発では、reactive は応答性の高いデータを実装するメソッドを提供します。これは日常の開発で頻繁に使用される API です。この記事では、著者はその内部動作メカニズムを探ります。

Vue3 で単体テストを作成する方法を調べる Vue3 で単体テストを作成する方法を調べる Apr 25, 2023 pm 07:41 PM

Vue.js は、今日のフロントエンド開発において非常に人気のあるフレームワークとなっています。 Vue.js が進化し続けるにつれて、単体テストの重要性がますます高まっています。今日は、Vue.js 3 で単体テストを作成する方法を検討し、いくつかのベスト プラクティスと一般的な問題と解決策を提供します。

JSX 構文と Vue のテンプレート構文の簡単な比較 (利点と欠点の分析) JSX 構文と Vue のテンプレート構文の簡単な比較 (利点と欠点の分析) Mar 23, 2023 pm 07:53 PM

Vue.js では、開発者は、JSX 構文とテンプレート構文という 2 つの異なる構文を使用してユーザー インターフェイスを作成できます。どちらの構文にもそれぞれ長所と短所があるので、それらの違い、長所と短所について説明します。

Vue3 動的コンポーネントで例外を処理する方法の簡単な分析 Vue3 動的コンポーネントで例外を処理する方法の簡単な分析 Dec 02, 2022 pm 09:11 PM

Vue3 動的コンポーネントで例外を処理するにはどうすればよいですか?次の記事では、Vue3 の動的コンポーネントの例外処理方法について説明します。

See all articles