У меня есть конфигурация для обслуживания веб-сайта с обработчиком ошибок. Он отлично работает с 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, потому что если я изменю 'post
' на 'get
' в ajax и на маршруте app.get, у меня все еще будет та же проблема, но если я вызываю Метод напрямую из URL (не ajax) работает. Есть идеи?
new2: Если я поставлю этот код на успех:
jQuery('body').html(data);
показывает страницу ошибки через несколько секунд. Мне нужно сделать это автоматически (и без этих нескольких секунд), когда какая-либо ошибка появляется на сервере, потому что я не знаю, будет ли это нормально, или если это ошибка, и задержка секунд также является проблемой. Пробалы что-нибудь на сервере могли быть не так? и он вставляет страницу ошибки в более старую страницу, поэтому не является решением