0

認証にnodejs、express、mongoose、およびpassportを使用しています。
ユーザーデータ(大量のデータ)を保持する User という名前のマングースモデルがあります。
いいえ、index.jade をレンダリングしてユーザー データをテンプレートに設定するルートを作成したいと思います。
私のルートは次のとおりです。

app.get('/something', function(req, res) {
    res.render('index', {
        user: req.user || {}
    });
});

私のテンプレート:

doctype 5
html(lang="en")
    head
    body
        script(type='text/javascript')
            window.user = #{user};

次の2つの問題があります。

  1. クライアントに User 構造全体を取得させたくありません。必要なのはいくつかの属性だけで、それだけです。Java と .NET から、データをクライアントに渡すことを目的とするオブジェクトを示す「データ転送オブジェクト」という用語があることを知っています。ノードで同等のものは何ですか? クライアントに関連データのみを渡すノードのベストプラクティスは何ですか?

  2. クライアントは、ユーザーを識別するためにユーザー ID を必要とします。mongo の元のユーザー ドキュメント _id を渡したくありません。私に何ができる?どうにかしてIDをエンコードする必要がありますか?

4

2 に答える 2

1

実際には、テンプレートで使用する変数を除いて、変数からクライアントに何res.renderも送信しないため、基本的にユーザーのユーザー名のみを渡したい場合は、安全に行うことができます (DRY の改善により):

render = function(page, req, res) {
   res.render(page, { user: req.user ? req.user : {} });
};

app.get('/something', function(req, res) { render('index', req, res); });
app.get('/pageA', function(req, res) { render('pageA', req, res); });
app.get('/pageB', function(req, res) { render('pageB', req, res); });

また

doctype 5
html(lang="en")
    head
    body
        script(type='text/javascript')
            | window.user = "#{user.username}";

より複雑なユーザー オブジェクトが必要な場合は、いつでも実行できます。

doctype 5
html(lang="en")
    head
    body
        script(type='text/javascript')
            | window.user = { username: "#{user.username}", email: "#{user.email}" };

基本的に、これはオブジェクトをクライアントに公開するuserのではなく、ノード ビューアー インスタンスのレンダリング機能にのみ公開します。

ユーザーIDについては、ユーザー名、電子メールアドレスなど、他の一意のユーザープロパティを使用できます.

于 2013-05-29T07:57:57.303 に答える
0

クライアントで使用するためにオブジェクトをシリアル化できます

doctype 5
html(lang="en")
    head
    body
        script(type='text/javascript')
            window.user = !={JSON.stringify(user)};

サーバー上でもシリアル化できます

app.get('/something', function(req, res) {
    res.render('index', {
        user: JSON.stringify(req.user || {})
    });
});

ビューでそれを割り当てるだけです

script(type='text/javascript')
    window.user = =#{user};
于 2013-05-29T17:45:47.177 に答える