2016-01-27 3 views
2
FB.setAccessToken(req.body.accessToken); 
FB.api('/me', function(response) { 
     Promise.try(function() { 
       return routes.getUser(response); 
     }).then(function(newResponse) { 
       res.render('groups', newResponse); 
     }).catch(function(e) { 
       console.error(e); 
     }); 
}); 

стороны клиента:Попытка получить Джейд перенаправление

function checkToken(response){ 
    $.post('/auth', { 
      id: response.authResponse.userID, 
      accessToken: response.authResponse.accessToken 
    }); 
} 

После того, как он достигнет конца Promise цепи в приведенной выше коде, он должен перенаправить клиент на новый взгляд, groups. Я не получаю никаких ошибок при запуске приложения. Как я могу заставить Jade отправить клиенту новое представление?

Можно ли визуализировать новый вид, который заменяет текущий вид? Или мне придется перенаправить страницу (на стороне клиента) для этого?

ответ

3

Jade - это шаблонный движок и на самом деле не имеет никакого отношения к вашему вопросу. Экспресс обрабатывает маршруты, которые вы используете для определения того, что загружается, когда и когда оно загружается.

Выполнение вызова AJAX с помощью $.post не перезагрузит вашу страницу (это основная цель вызова AJAX). На основе вашего текущего кода вам нужно будет добавить обратный вызов к вашему вызову $.post, и как только вы получите данные, замените HTML-код текущей страницы HTML на вызов AJAX. Вы также можете сделать что-то вроде window.location.href = 'new page URL here';.

Последнее, но не менее важное: вы можете сделать res.redirect на сервере, но это не будет отображаться в текущем коде. Независимо от того, какой маршрут у вас есть, который загружает страницу с этим битом JavaScript, нужно вместо этого выполнить ту же логику на стороне сервера, а затем сделать res.redirect или просто сразу загрузить правильный шаблон с res.render в этот момент.

2

Ничего общего с Джейд, как отмечено в ответе майкла.

Можно ли визуализировать новый вид, который заменяет текущий вид?

Нет. Рендеринг (в данном случае) происходит на стороне сервера. Когда обработанный HTML отправлен клиенту, и браузер отобразил его, сервер больше не будет влиять на страницу напрямую.

(* также называется рендерингом, но это связанно с браузером фактически покраской страницы для клиента, more details)

После того, как вы делаете res.render (или res.send, res.redirect) в обработчике маршрута он будет последним, что вы можете сделать с сервера, чтобы повлиять на страницу или, в более общем плане, ответ, отправленный клиенту, который в res.redirect будет всего лишь кодом статуса 302 и заголовком местоположения. (Отправка ответ дважды в тот же обработчик может привести к «заголовки уже прислал» ошибки)

это все ДО клиента, чтобы изменить вид тогда, так ...

Или мне придется перенаправить страницу (на стороне клиента) для этого?

точно.

Смежные вопросы