2016-11-11 2 views
0

Я полностью потерял это. У меня есть простое приложение, которое задает пользователю 6 вопросов. Каждый вопрос и доступные ответы отображаются на динамически сгенерированном представлении для определенного маршрута вопросов. Я хочу настроить время, которое работает следующим образом. Когда задается вопрос 1, у пользователя есть 5 минут, чтобы ответить на все 6 вопросов. Таймер будет очищаться после того, как произойдет POST для вопроса 6.Таймер на основе экспресс-событий 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, он просто использует переданную «информацию» для генерации вопросов и ответов, а затем использует стандартный метод form = post для отправки ответа, выбранного обратно в app.post.

Может ли кто-нибудь рекомендовать хороший метод для достижения этого, что не слишком сложно? Благодаря!

+0

Зачем нужен таймер на 'ExpressJS' (на стороне сервера)? Вы должны сделать это на стороне клиента с помощью 'setTimeout' или' setInterval'. Если вы все еще нуждаетесь в этом со стороны сервера, вам понадобится серверный push с помощью 'websockets', используя' socket.IO' и т. Д., Что сделает вещи сложными. Легко один идет с сценариями на стороне клиента. – Aruna

+0

Можете ли вы показать пример того, как это будет выглядеть с помощью этого примера? –

+0

Любые сценарии на стороне клиента вы используете как 'jquery',' angular' и т. Д.? – Aruna

ответ

1

Возможно, вы должны использовать сеансы для этой задачи. После запроса первого вопроса вы устанавливаете переменную сеанса, которая укажет время, когда на все вопросы должен быть дан ответ. После этого вы просто сравниваете это значение переменной с текущим временем запроса. Я думаю, это один из самых простых подходов к решению вашей задачи.

+0

Это была моя оригинальная мысль. Проблема в том, что я уже устанавливаю сеанс, когда пользователь входит на страницу. Сессия существует даже тогда, когда опрос завершен, и они смотрят на результаты. Я не мог понять, как убить таймаут после окончания опроса без выполнения текущей сессии. –

+0

Вам не нужен тайм-аут. Когда вы начинаете этот опрос или викторину, вам нужно установить переменную в сеансе, которая будет содержать временную метку будущего (крайнего срока), когда этот опрос или викторина будут недействительными. Так что, если я начну с Пт 11 ноября 2016 года 03:36:09, то опрос должен быть недействительным в пятницу, 11 ноября 2016 года 03:41:09. И в каждом запросе вы проверяете, не превышает ли текущая временная метка, чем временная метка срока. Если это меньше срока, викторина может по-прежнему работать, но если нет - викторина должна быть остановлена. – k10der

+0

Это имеет смысл, но что происходит с прецедентом, когда пользователь сидит на последнем вопросе в течение 30 минут? Запрос не подан, поэтому крайний срок никогда не оценивается, и викторина остается открытой, несмотря на то, что она выходит за пределы. Вот почему я хотел, чтобы это был внутренний таймер обратного отсчета времени. –