我有一个配置来为带有错误处理程序的网站提供服务。它适用于 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});
}
});
当我导航到错误的网址(我的服务器上未定义的某些网址)时,它会正确转到定义的错误页面(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错误可能是什么问题?我的语法正确吗?
新:问题必须出在ajax成功上,因为如果我在ajax和app.get路由中通过'get
'更改'post
',我仍然遇到同样的问题,但如果我直接从URL(而不是ajax)调用该方法,它就可以工作。有什么想法吗?
new2:如果我将此代码放入成功:
jQuery('body').html(data);
几秒钟后显示错误页面。当服务器发生任何错误时,我需要自动执行此操作(并且没有那几秒),因为我不知道它是否会正常,或者是否是错误,并且滞后秒也是一个问题。也许服务器上的任何东西都可能出错?它将错误页面注入(inject)到旧页面中,所以这不是解决方案
我是一名优秀的程序员,十分优秀!