我有一个配置用于为带有错误处理程序的网站提供服务。它适用于app.post
请求,但不适用于Ajax请求。
这是我的错误处理中间件,其中包含正确运行的错误路径错误的示例:
//Bad path error
app.get('*', function(req, res, next){
next('404'); //This works fine
});
//Errors control Middleware
app.use(function (err, req, res, next) {
if (typeof (err) === 'string') {
var lang = require(path.join(__dirname, '_public', 'errors', 'lang', process.env.LANG + '.js'));
return res.render(path.join(__dirname, '_public', 'errors', err), {lang});
} else {
log.error(err);
var lang = require(path.join(__dirname, '_public', 'errors', 'lang', process.env.LANG + '.js'));
return res.render(path.join(__dirname, '_public', 'errors', '500'), {lang});
}
});
当我导航到错误的URL(某些未在服务器上定义的URL)时,它会正确进入已定义的错误页面(404,即.hbs)。问题在于该方法似乎不适用于下一个Ajax请求:
jQuery.ajax({
type: 'POST', //I have the same problem with 'GET'
url: '/componentName/methodName',
data: {
accessToken: localStorage.token
},
}).then(function success(data) {
//TODO
}, function error(err) {
console.log(err);
})
这段代码是针对服务器端的:
app.post("/componentName/methodName", function (req, res, next) {
var token = req.body.accessToken;
var decodedToken = jwt.decode(token);
var user_id = decodedToken.payload.user_id;
model.getTasks(user_id).then(function (modelData) {
res.send(modelData); //This works fine
}, function () {
next('500'); //This broke the page and doesn't show error page
});
});
不显示Ajax错误可能是什么问题?我的语法正确吗?
new:问题一定在ajax成功上,因为如果我在ajax和app.get路由中将“ post
”更改为“ get
”,我仍然遇到相同的问题,但是如果我直接从URL(而不是Ajax)调用该方法,它将起作用。有想法吗?
new2:如果我成功使用此代码:
jQuery('body').html(data);
几秒钟后显示错误页面。当服务器发出任何错误时,我需要自动执行此操作(并且没有几秒钟的时间),因为我不知道这是否可以,或者是否有错误,并且滞后秒数也是一个问题。也许服务器上的任何东西都可能是错误的?并将错误页面注入到较旧的页面内,因此不是解决方案
答案 0 :(得分:0)
model.getTasks(user_id).then(function (modelData) {
res.send(modelData); //This works fine
}).catch(function () {
next('500');
})
使用挡块