Могу ли я сделать исключение для маршрута в Express? - PullRequest
0 голосов
/ 27 ноября 2018

Ниже приведен код, на который я ссылаюсь,

axios.get('http://localhost:1337/')
.then( response => {
var dataSet = response.data;

// URL Handle for Data page
app.get('/data', (req, res) => {
     res.render('data', {
         data = dataSet
     });
});

})
.catch( error => {
   console.log('An error occurred: ' + error);
});

// URL Handle for Contact page
app.get('/contact', (req, res) => {
   res.render('contact');
});

// URL Handle for Error page
app.all('*', (req, res) => {
   res.render('error');
});

Теперь, поскольку я использую Axios для получения ответа из базы данных, я также отображаю данные на той странице, где я хочуответ API.

Но есть проблема, когда я использую обработчик "app.all" для неправильного дескриптора URL, он перенаправляет на страницу ошибки.

Мне нуженрешение, в котором может быть исключение, которое может быть добавлено в обработчик «app.all», и всякий раз, когда дескриптор имеет значение «/ data», он не перенаправляется на «/error'.

»

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Похоже, что ваш маршрут для /data зарегистрирован после завершения асинхронного вызова axios.

Попробуйте поместить axios вызов в обработчик маршрута

app.get('/data', (req, res) => {
  axios.get('http://localhost:1337/').then( response => {
    var dataSet = response.data;
    res.render('data', {
      data: dataSet
    });
  })
  .catch( error => {
    console.log('An error occurred: ' + error);
  });
});


// URL Handle for Contact page
app.get('/contact', (req, res) => {
  res.render('contact');
});

// URL Handle for Error page
app.all('*', (req, res) => {
  res.render('error');
});
0 голосов
/ 27 ноября 2018

Вы должны использовать axios в контроллере, поэтому код должен выглядеть следующим образом:

app.get('/data', async (req, res, next) => {
     try{
       const { body }  = await axios.get('http://localhost:1337/')

       res.render('data', {
         data : body
       });
     }catch(error){
       next(error)
     }
});

Как видите, если есть ошибка, вы должны вызвать next функцию с экземпляром ошибки, а затем создать промежуточное ПО как errorHandler чтобы поймать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...