nodejs выражает res.render в вызовах ajax - PullRequest
0 голосов
/ 07 июня 2018

У меня проблема с res.render () в expressjs. Я использую ajax для запроса по этому маршруту:

route.get('/about',authentication,(req,res)=>{
    res.render('about');
});

Я выполнил поиск и обнаружил, что res.render не работает с вызовами ajaxтак как я могу изменить и отобразить страницу без res.render().

Если я удаляю res.render и console.log, это будет работать на самом деле любой код работает, но не res.render (нажав на ссылку, которую я отправляютокен в заголовке с запросом ajax, затем на моем маршруте у меня есть промежуточное ПО аутентификации, которое получает токен, затем перенаправляет пользователя на about.ejs страницу)

Я просто хочу изменить страницу.Любая идея поможет парням.спасибо вот внешний запрос:

$(document).ready(function(){
       $('#about').click(function(){
         // window.location.href='/about';
           $.ajax({
              method:'get',
              url:'http://localhost:5000/about',
              headers:{"authtoken":localStorage.getItem('authToken')}
           }).done(()=>{
               // window.location.href='/about';
           }).catch(e=>console.log('header.ejs error'));
       });
    });

Ответы [ 4 ]

0 голосов
/ 07 июня 2018

res.render создает HTML-страницу с использованием шаблонов и отправляет окончательный составленный результат с сервера на клиент.Он не выполняет рендеринг страницы в окне клиента.

Если запрос выполняется путем ввода URL-адреса в адресной строке браузера, браузер выполнит запрос и отобразит результат, отправленный сервером..

Если вы сделаете ajax-запрос, вы получите этот ответ, но вы обязаны что-то с ним сделать в обратном вызове .done.Браузер волшебным образом не знает, что делать с данными, если вы делаете запрос ajax.А поскольку у вас ничего нет в вашем .done обратном вызове, ничего не произойдет.

Итак, вы должны сделать что-то вроде этого:

.done(response => {
    var bodyContent = response.match(/<body>(.*)<\/body>/)[1]
  $('body').html(bodyContent);
})
0 голосов
/ 07 июня 2018

Обычно ajax используется для обновления части страницы с использованием некоторого resposne с сервера без обновления страницы.Если вы хотите перейти на другой маршрут вместо ajax, используйте отправку формы или href.Если вы придерживаетесь ajax, верните JSON с сервера и выполните изменение, используя javascript

requestHandler=(req,res)=>{
 res.json({data:{}})
}
0 голосов
/ 07 июня 2018

Ваш роутер не будет отображать страницу, он будет отправлять только ответ, а я не получил только для рендеринга страницы, почему вы вызываете ajax-запрос на событие щелчка.маршрутизатор.Он будет отображать определенную страницу, для этого ваш маршрутизатор должен выглядеть примерно так:

    // about page route (http://localhost:8080/about)
    router.get('/about',isAuthenticated, function(req, res) {
        res.sendFile(path.join(__dirname+'/public/about.html'));
    }); 

   function isAuthenticated(req, res, next) {
  // do any checks you want to in here

  // CHECK THE USER STORED IN SESSION FOR A CUSTOM VARIABLE
  // you can do this however you want with whatever variables you set up
  if (req.user.authenticated)
      return next();

  // IF A USER ISN'T LOGGED IN, THEN REDIRECT THEM SOMEWHERE
  res.redirect('/');
 }

И изменить URL при нажатии на http://localhost:8080/about

0 голосов
/ 07 июня 2018

Шаг-1: Создайте общедоступный URL-адрес, скажем http://your -web-site.com / redirect_destination.html

Шаг-2: При выполнении запроса AJAX из внешнего интерфейса, перенаправить пользователя на эту страницу, используя .redirect() метод на response

РЕДАКТИРОВАТЬ:

Дело в том, я не думаю,можно отобразить страницу, сделав запрос ajax.Вы можете подготовить URL, который отображает нужную вам страницу, и перенаправить пользователя на этот URL, используя метод .redirect().

...