以下是我所指的代码
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”。
答案 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');
});