Выражение петиций на nodeJs от ajax не показывает страницу ошибки - PullRequest
1 голос
/ 04 июня 2019

У меня есть конфигурация для обслуживания веб-сайта с обработчиком ошибок. Он отлично работает с 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);

показывает страницу ошибки через несколько секунд. Мне нужно сделать это автоматически (и без этих нескольких секунд), когда какая-либо ошибка появляется на сервере, потому что я не знаю, будет ли это нормально, или если это ошибка, и задержка секунд также является проблемой. Пробалы что-нибудь на сервере могли быть не так? и он вставляет страницу ошибки в более старую страницу, поэтому не является решением

1 Ответ

0 голосов
/ 04 июня 2019
model.getTasks(user_id).then(function (modelData) {
    res.send(modelData);    //This works fine
}).catch(function () {
    next('500');
})

Использовать блок захвата

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...