nodeJs从ajax表达请愿书不显示错误页面

时间:2019-06-04 10:34:19

标签: node.js ajax express

我有一个配置用于为带有错误处理程序的网站提供服务。它适用于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);

几秒钟后显示错误页面。当服务器发出任何错误时,我需要自动执行此操作(并且没有几秒钟的时间),因为我不知道这是否可以,或者是否有错误,并且滞后秒数也是一个问题。也许服务器上的任何东西都可能是错误的?并将错误页面注入到较旧的页面内,因此不是解决方案

1 个答案:

答案 0 :(得分:0)

model.getTasks(user_id).then(function (modelData) {
    res.send(modelData);    //This works fine
}).catch(function () {
    next('500');
})

使用挡块