2016-11-11 18 views
0

これは完全に失われています。私はユーザーに6つの質問をする簡単なアプリを持っています。利用可能な各質問と回答は、特定の質問ルートの動的に生成されたビューに表示されます。私は次のように動作する時間を設定したい:質問1が示すとき、ユーザーは5分で6つの質問すべてに答える。問題6のPOSTが発生すると、タイマーはクリアされます。Express JS GET/POSTイベントに基づくタイマー

(EJSモデルを使用して)次のようにGET/POSTコードの基礎である:

app.get('/survey/:question_number?', restrict, routes.survey); 
app.post('/survey/:question_number', function(req, res) { 
    //question code 
} 

ここ輸出ルートコードである:HTMLは

exports.survey = function(req, res) { 
    //Question logic to pass to the render 
    res.render('question', { 
    info : info 
    }); 
} 

、それ単に用途が渡された "info"を使用して質問と回答を生成し、標準フォームmethod = postを使用して選択した回答をapp.postに送り返します。

誰もこれを達成するための良い方法を推薦しても過度に複雑ではありませんか?ありがとう!

+0

なぜ「ExpressJS」(サーバー側)にタイマーが必要なのですか?あなたは 'setTimeout'または' setInterval'でクライアント側でこれを行う必要があります。それでもサーバ側から必要がある場合は、 'socket.IO'などを使って' websockets'の助けを借りてサーバプッシュが必要になります。簡単なものは、クライアント側のスクリプトと一緒に行く。 – Aruna

+0

この例でどのように表示されるかの例を表示できますか? –

+0

クライアント側のスクリプトは、 'jquery'、' angular'などのように使用していますか? – Aruna

答えて

1

おそらく、このタスクにはセッションを使用する必要があります。最初の質問が要求された後、すべての質問に答える必要がある時間を示すセッション変数を設定します。その後、この変数の値とリクエストの現在の時刻を比較するだけです。私はそれがあなたの仕事を解決する最も簡単なアプローチの1つだと思います。

+0

それも私の元々の考えでした。問題は、ユーザーがページにログインしたときに既にセッションを確立していることです。セッションは、調査が終了しても結果を見ていても存在します。私は、現在のセッションに影響を与えずに調査が終了した後にタイムアウトを殺す方法を見つけられませんでした。 –

+0

タイムアウトは必要ありません。このアンケートまたはクイズを開始するときは、このアンケートまたはクイズが無効になる将来の(期限切れの)タイムスタンプを保持する変数をセッションに設定する必要があります。ですから、私がFri Nov 11 2016 03:36:09 Fri Nov 11 2016 03:41:09に無効になるはずです。また、リクエストごとに、現在のタイムスタンプが期限のタイムスタンプよりも大きくないかどうかをチェックします。締め切りよりも短い場合は、クイズはまだ機能しますが、そうでない場合はクイズを停止する必要があります。 – k10der

+0

これは理にかなっていますが、ユーザーが最後の質問に30分間座っているユースケースはどうなりますか?依頼は行われないので、締め切りは決して評価されず、限界を超えているにもかかわらず、クイズは開いたままです。だから私はそれが内部のタイムアウトカウントダウンクロックであることを望んでいたのです。 –

関連する問題