2016-11-11 22 views
0

我完全失去了這一個。我有一個簡單的應用程序,向用戶提出6個問題。每個問題和可用答案都顯示在針對特定問題路線的動態生成視圖中。我想設置一個按如下方式工作的時間:當問題1顯示時,用戶有5分鐘回答所有6個問題。一旦問題6的POST發生,定時器就會清除。基於Express JS GET/POST事件的計時器

爲GET/POST碼的基礎是如下(使用EJS模型):

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

這裏是出口路線代碼:

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

用於HTML,它只是使用傳遞的「信息」生成問題和答案,然後使用標準表單method = post將答案發送回app.post。

任何人都可以推薦一個好的方法來完成這個不是太複雜?謝謝!

+0

爲什麼你需要'ExpressJS'(服務器端)定時器?你必須在'setTimeout'或'setInterval'的客戶端執行此操作。如果你仍然需要從服務器端得到這個,你需要使用'socket.IO'等'websockets'來進行服務器推送,這會使事情變得複雜。簡單的一點就是使用客戶端腳本。 – Aruna

+0

你能舉一個例子來說明這個例子的外觀嗎? –

+0

任何客戶端腳本您使用像'jquery','angular'等? – Aruna

回答

1

您應該爲此任務使用會話。在第一個問題被請求後,你設置一個會話變量,這將表明時間,當所有問題都必須被回答。之後,您只需將此變量值與請求的當前時間進行比較。我想這是解決你的任務最簡單的方法之一。

+0

這也是我原來的想法。問題是當用戶登錄到頁面時,我已經建立了一個會話。即使調查結束並且他們正在查看結果,該會話仍然存在。在調查結束後,我無法想出一種方法來消除超時而不影響當前會話。 –

+0

你不需要超時。當您開始此調查或測驗時,您需要在會話中設置一個變量,以便在未來(截止日期)時間戳中進行調查或測驗無效時。所以如果我在2016年11月11日星期五03:36:09開始,那麼調查應該在2016年11月11日星期五03:41:09無效。並且在每個請求中,檢查當前時間戳是否不大於截止時間戳。如果不到最後期限,測驗仍然可以正常工作,但如果不是,則應停止測驗。 – k10der

+0

這很有道理,但用戶在最後一個問題上坐了30分鐘的用例會發生什麼?沒有提出任何要求,所以截止日期從未被評估,並且測驗仍然開放,儘管它​​超出了限制。這就是爲什麼我希望它是一個內部超時倒數計時器。 –