2012-02-26 5 views
1

ログイン時に、私は$.cookie('userId')でアクセスできるように、userIdをjQueryクッキーに保存します。今、私のように、ジェイドからアクセスしようとしていることをJADEのjQueryオブジェクトへのアクセス

は、

- if ($.cookie('userId') === userId) 

は、私はクッキーにアクセスするにはどうすればよい

が定義されていない

$エラーを取得します?

マイコード:

- if (($.cookie('userId')) === userId) 
               input(type='submit', value='Move') 
              else 
               input(type='submit', disabled, value='Move'') 

答えて

14

あなたは概念を誤解しているようです。私はあなたに講義をしましょう。 ;)

基本。 Cookieはクライアント側に格納されます。したがって、jQuery $.cookie('userId')を使用すると、このスクリプトがクライアント側で実行されたときに取得されます。

しかし、ここではサーバー側でJADEテンプレートエンジンを使用しています。だからあなたはまだクライアント側にページを送っていない。だから、どのクッキーを検索したいですか?あなたはサーバーにいるので、クッキーはありません。

さらにご覧ください。サーバー側にいるので、$.cookie('userId')を実行するとエラーがスローされます。 $オブジェクトはありません。 jQueryをサーバー側で使用することはできません(実際は可能ですが、現時点では無関係です)。あなたのルートシステムに$オブジェクトを定義しましたか?または、ヘルパー$を定義しましたか?私はそうは思わない。

Express + JADEチュートリアル。ここでは簡単なチュートリアルをしましょう。あなたが変数として使用することができますcodeindex.jadeで今

app.get('/', function(req, res){ 
    res.render('index.jade', { code: 500 }); 
}); 

あなたは(app.js中)のビューを持っていると言います。

// some code 
- if (code == 500) 
    input(type='submit', disabledm, value='Move') 
- else 
    input(type='submit', value='Move') 
// some code 

を、今では動作します:だからあなたはこのような例のためにあなたのindex.jadeを書くことができます!テンプレートをあらかじめ定義しておけば、JavaScript関数をテンプレートで使用することもできます。例えば

app.helpers({ 
    positive: function(no) { return no > 0; } 
}); 

(あなたapp.jsに)、その後index.jadeテンプレートで、あなたは

- if (positive(-13)) 
    input(type="submit") 

を使用しても、クッキーためにCookieまたはないためにこれら二つの概念

- if (positive(code)) 
    // do some stuff 

を組み合わせることができます。本当にクッキーを使用する必要がある場合(セッションやCSRFを除いてはいけません)、クライアント側のJavaScriptを使用する必要があります。これは、あなたがこの

$(document).ready(function() { 
    if ($.cookie('userId') == userId) { 
    // do something like append input to some holder 
    } 
}); 

ようmy-script.jsindex.jadeファイルに(jQueryの後)

script(src='my-path/my-script.js') 

を追加して記述する必要がある。しかし、そのソリューションにはいくつかの問題があることを意味します。最初:userId(平等の第2部分)とは何ですか? index.jadeに事前定義する必要があります。例えば

script 
    var userId = #{ user.id }; 

を使用して、ルート内userオブジェクトを追加します。 2番目:クッキーはローカル変数です。それらを設定するには、あなたが望むものではない追加のサーバーコードが必要です。これにより、アプリをより固く保つことができます。最後に、ユーザーのIDをクッキーに保存することは意味がないようです。最終的なユーザーは自分のIDであることを知る必要はありません。サーバーは知っている必要があります!セッションシステムはここで便利です。

最終ノート。あなたが書いたコードは、サーバーサイドとクライアントサイドのJavaScriptを区別できないことを示しています。あなたの問題に対する解決策は、学び、学び、学ぶことです。 JADE、Express、Node.jsに関するチュートリアルやすべてを読んでください。

+0

おかげのようにサーバにアクセスすることができるはずです。あなたは非常に正しいです、私はクライアント側とサーバー側の間に混乱している...それは根本的な問題でした。これを指摘してくれてありがとう...素晴らしい! – user644745

+0

素晴らしい答えです、ありがとう! – kaxi1993

1

@freakishが正しいと言いました。サーバー側とクライアント側を試しています。
クッキーが設定されている場合は、あなたが言及したすべてのポイントのためにそう

app.use(express.cookieParser()); 

app.get('/', function(req, res){ 
    // index is jade template 
    // local variable on jade template holds cookie value 
    // use req.cookies.userid 
    res.render('index', { userid: req.cookies.userid }); 

}); 
+0

req.cookies.useridに感謝します。適切なときはいつでもそれを試してみます。 – user644745

関連する問題