2

node.js サーバーからクライアントの JavaScript にデータを (理想的には json オブジェクトの形式で) 送信する最良の方法は何ですか。いくつかのオプションを考えましたが、どれも私の意見ではあまり適していないようです。セカンドオピニオン、またはその他の提案は、私が探しているものです。

  1. グローバル変数を設定するために、サーバーに<script>タグ内のコードを出力させます。

    以前にこれを使用したことがありますが、主に XSS の可能性があるため、その考えは嫌いです。送信されるデータがユーザーによって定義されていなくても、それは悪い習慣だと思います。

  2. 内部のデータを使用して Cookie を設定します。

    このオプションは少し優れていますが、ページが読み込まれるたびにデータが変更される可能性が高いため (少なくとも私の設定では)、Cookie はこのように揮発性であるとは考えられないため、実際には適していません。

  3. クライアントの JavaScript で、ページの読み込み時にサーバーに ajax リクエストを作成して、json ファイルをリクエストします。

    これも同様に機能しますが、多くの不要なオーバーヘッドが追加されます。1 ページあたり 2 つのリクエストは不要のようです。

バックグラウンド:

ログアウトしたユーザーのインデックスとメイン コンテンツ テンプレートの 2 つのテンプレートを持つサイトがあります。

私のサーバー側は、node.js、express.js、jade、および less から構築されています。

すべてのリンクに history.pushState を使用し、クライアントのページ ルーティングに crossroads.js を使用しています。ロードされたテンプレートとユーザーの ID を送信できるようにしたいと考えています。クライアントの JavaScript にログインしている場合は、それに応じてページの変更を処理できます。ログアウトしたユーザーは、編集権限がなくてもコンテンツ ページを表示できます。また、特定のリンクをクリックすると、インデックス テンプレートに戻るはずです。

4

4 に答える 4

1

<script>タグ方式が良いです。他のスクリプトがデータにアクセスすることを心配している場合は、グローバル変数を設定する代わりに、データを受け入れることができる関数をクライアントのjsコードに記述します。

したがって、生成する代わりに:

<script>
  data = { foo : "bar" }
</script>

次のようなものを生成します。

<script>
  setData({ foo : "bar" });
</script>

明らかに、構文エラーなどを回避するために、生成するデータは適切なJSONシリアライザーによってシリアル化する必要があることを伝える必要はないと思います。

于 2012-11-01T02:13:17.863 に答える
1

<scriptワンタイム データを「text/template」または「application/json」タイプの > タグで囲み、 ID があることを確認します。jQuery または標準の DOM メソッドを使用してコンテンツにアクセスします。短いデータの場合はdata-*、主要な要素に属性を使用できます。

于 2012-10-31T23:10:36.500 に答える
0

Ajax の代わりに、Socket.ioまたはNow (socket.io を実装する) のいずれかを使用して websockets を実装できます。これらにより、クライアントとサーバー間でデータを簡単にやり取りできるだけでなく、クライアントがサーバー上の関数を呼び出すこともできます。

于 2012-10-31T19:24:59.710 に答える