「私を覚えてください」機能は非常に便利な機能で、React と Express を使用して実装するのは比較的簡単です。 WebRTC チャット アプリケーションをセットアップする前の部分を続けて、Mongo がサポートする永続セッションと、データベースがサポートするオンライン ユーザーのリストを追加します。
###セッション?これまでセッションを使用したことがない場合、セッションはアプリケーションのアクティブ ユーザーをリアルタイムで追跡できるという点で Cookie に非常に似ています。セッションは実際には、アプリケーションからの要求/応答ヘッダーで送信される
session cookie を介して機能します。
したがって、実際のチャット アプリケーションの例では、ユーザーのユーザー名を保存できるようになりました。また、アプリケーションを少し再構成すると、チャット履歴全体をログ用のデータベースに挿入することもできます。
次の例では、永続的なバックエンド ストレージとして Mongo データベースを使用します。これは、セッション ストレージに使用できるいくつかのオプションの 1 つであり、複数の Web サーバーを使用する大規模な運用セットアップに強くお勧めするもう 1 つのオプションは memcache です。
ドキュメントストレージ
Mongo は NoSQL ドキュメント ストレージ エンジンであり、人気のある MySQL のようなリレーショナル データ ストアではありません。以前に MySQL または同様のデータベースを使用したことがあり、Mongo の速度に慣れる必要がある場合、NoSQL は非常に簡単に始めることができ、それほど時間はかかりません。知っておくべき最大の違いは次のとおりです:
- 名前が示すように、NoSQL はクエリの実行に SQL を使用しません。代わりに、データはメソッド呼び出しを通じて抽象化されます。たとえば、
- db.collectionName.find()
は
SELECT * FROM tableになります。
用語が異なります。MySQL にはテーブル、行、列がありますが、Mongo にはコレクション、ドキュメント、キーがあります。 - データは JSON オブジェクトと同じように構造化されています。
リーリー
Mongo をインストールした後、npm が提供するmongoose モジュールを使用して、チャット アプリケーションに Mongo サポートを簡単に追加できます。次のコマンドを使用して
mongoose をインストールします:
リーリー
app.js を開き、スクリプトの先頭を次のように設定します。
リーリー
require('mongoose') に
mongoose を含めて、
mongoose.connect('mongodb://localhost:27017/chat') ;## を渡します。 #。
接続するデータベースの名前を定義します。
次に、開発目的で、デバッグをオンに設定することをお勧めします。
最後に、エラー イベントのハンドラーを追加します:
リーリー次に、次のコードを使用して接続のチェックを追加できます。
リーリー mongoose の使用方法は、db
インスタンスが open
イベントを受信すると、mongo 接続の実行に移ります。したがって、既存のコードをこの新しい mongo 接続にラップして使用する必要があります。
以下は、ユーザーがオンラインおよびオフラインのときに mongoose を追加し、行を挿入および削除する完全なコードのリストです。
これが実際にどうなるかを確認するために、チャット アプリケーションを起動してみましょう。
npm start を実行して開始します。
これで、ブラウザで通常どおりチャットに接続できるようになりました (デフォルトは http://localhost:3001)。
チャットに接続した後、新しいターミナル ウィンドウで
mongo chat を開き、mongo cli を入力します。
リーリー
ここに
ドキュメント レコードが保存されています。mongo プロンプトで db.users.count を実行すると、いつでもオンライン()
になっているユーザーの数を確認できます。
リーリー
セッションをアプリに追加する
Express を使用してアプリケーションを構築しているため、この部分は非常に単純で、開始するには
npm からいくつかのモジュールをインストールするだけで済みます。
npm から
および connect-mongo
パッケージを取得します:
リーリー
次に、これらを
の先頭に含めます:
<pre class='brush:php;toolbar:false;'>
var PeerServer = require('peer').PeerServer,
cookieParser = require('cookie-parser'),
express = require('express'),
session = require('express-session'),
mongoose = require('mongoose'),
MongoStore = require('connect-mongo')(session),
//...
</pre>
<p>设置 <code class="inline">mongoose.connect
后,您可以使用 Express 配置会话。将您的代码更改为以下内容;您可以指定自己的 secret
字符串。
//Connect to the database mongoose.connect('mongodb://localhost:27017/chat'); var db = mongoose.connection; mongoose.set('debug', true); db.on('error', console.error.bind(console, '# Mongo DB: connection error:')); app.use(cookieParser()); app.use(session({ secret: 'supersecretstring12345!', saveUninitialized: true, resave: true, store: new MongoStore({ mongooseConnection: db }) }))
这里需要注意的一个关键设置是最后一个 app.use
中的 saveUninitialized: true
。这将确保保存会话。
我们使用 store
属性指定位置,该属性设置为 MongoStore
实例,通过 mongooseConnection
和我们的 db
对象。
为了存储到会话中,我们需要使用express来处理请求,因为我们需要访问请求值,例如:
//Start persistent session for user app.use(function(req, res, next) { req.session.username = id; req.session.save();
这将使用用户输入的值创建 req.session.username
变量并保存以供稍后使用。
接下来,我们可以使用客户端代码检查此值,并在用户刷新时自动登录,这样他们就永远不会退出聊天并自动以其选择的用户名登录。
还值得注意的是,因为我们有数据库支持的会话,所以如果开发人员更改应用程序和后端重新加载,登录到其客户端的用户将保持登录状态,因为会话存储是现在执着。这是一个很棒的功能,可以让您的用户在开发过程中或在与不稳定的客户端断开连接时始终保持登录状态。
持久登录
现在我们已经设置了会话 cookie 部分,接下来让我们将持久登录添加到我们的前端代码中。
到目前为止,我们只是使用了 Express 为 SPA 应用程序提供的默认路由,并没有为 Express 定义任何路由处理。正如我之前提到的,要访问会话,您将需要 Express 的请求/响应变量。
首先,我们需要一个路由,以便我们可以访问 Express 提供的 request
对象并显示它以进行调试。在 /app.js
中的 Express 配置内,在会话设置之后,在文件顶部附近添加以下内容:
app.use(session({ secret: 'supersecretstring12345!', saveUninitialized: true, resave: true, store: new MongoStore({ mongooseConnection: db }) })) app.get('/', function (req, res) { res.sendFile(__dirname +'/src/index.html'); if(req.session.username == undefined){ console.log("# Username not set in session yet"); } else { console.log("# Username from session: "+ req.session.username); } });
现在我们有一些基本的日志记录来查看我们的会话值发生了什么。为了设置它,我们需要像这样配置 getter 和 setter 路由:
//Save the username when the user posts the set username form app.post('/username', function(req, res){ console.log("# Username set to "+ req.body.username); req.session.username = req.body.username; req.session.save(); console.log("# Session value set "+ req.session.username); res.end(); }); //Return the session value when the client checks app.get('/username', function(req,res){ console.log("# Client Username check "+ req.session.username); res.json({username: req.session.username}) });
这两条路由将用作用户名会话变量的获取和设置。现在,通过一些基本的 JavaScript,我们可以为我们的应用程序实现自动登录。打开src/App.js
,修改如下:
/* global EventEmitter, events, io, Peer */ /** @jsx React.DOM */ $(function () { 'use strict'; // Check for session value $(document).ready(function(){ $.ajax({ url: '/username' }).done(function (data) { console.log("data loaded: " + data.username); if(data.username) initChat($('#container')[0], data.username); }); }); // Set the session $('#connect-btn').click(function(){ var data = JSON.stringify({username: $('#username-input').val()}); $.ajax({ url: '/username', method: "POST", data: data, contentType: 'application/json', dataType: 'json' }); }); // Initialize the chat $('#connect-btn').click(function () { initChat($('#container')[0], $('#username-input').val()); }); function initChat(container, username) { var proxy = new ChatServer(); React.renderComponent(, container); } window.onbeforeunload = function () { return 'Are you sure you want to leave the chat?'; }; });
使用 jQuery 的 $.ajax
工具,我们创建一个请求,以在 文档
可用时检查会话变量的值。如果设置了,我们就会使用存储的值初始化我们的 React 组件,从而为我们的用户提供自动登录功能。
使用 npm start
再次启动聊天,并在浏览器中查看会话是否正常工作。
结论
现在您已经看到将 Mongoose 与 Express 结合使用并设置 Express 会话是多么容易。使用 React 作为链接到数据库支持元素的视图控制器来进一步开发应用程序将创建一些重要的应用程序。
如果您想进一步了解 React 并了解组件如何在 React 框架内部相互通信,官方文档中的这份指南非常有用。
以上がReact: 永続的なデータとシームレスなセッションの確保の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック









