我可以为Express中的路线设置例外吗?

时间:2018-11-27 13:59:38

标签: node.js express url axios

以下是我所指的代码

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的响应。

但是当我对错误的URL句柄使用“ app.all”处理程序时出现问题,它会重定向到错误页面。

我需要一个解决方案,其中可以添加一个异常,该异常可以添加到“ app.all”处理程序中,并且无论何时该句柄为“ / data”,它都不会重定向到“ /error”。

2 个答案:

答案 0 :(得分:0)

您应该在控制器中使用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来捕获它。

答案 1 :(得分:0)

似乎/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');
});