【问题标题】:504 gateway timeout node +express + postgresql504网关超时节点+express+postgresql
【发布时间】:2016-01-08 09:14:09
【问题描述】:

我使用 node + express 作为后端,postgresql 用于数据库,EJS 用于前端。

我正在为服务器启动/停止/日志使用 pm2 包。

有时 API 查询错误意味着服务器在 1/2 分钟后没有响应,出现 504 网关超时错误。

示例:我正在访问此页面中的http://mysiteurl/index url 我有一些错误或异常意味着我尝试连接另一个页面http://mysiteurl/about,此页面也收到错误:504 网关超时

有时在 /index 调用中会出错

错误详情:

{ [error: invalid input syntax for integer: "undefined"] 
 name: 'error', 
 severity: 'ERROR', 
 code: '22P02', 
 detail: undefined, 
 hint: undefined, 
 position: '87', 
 internalPosition: undefined, 
 internalQuery: undefined, 
 where: undefined, 
 file: 'numutils.c', 
 line: '62', 
 routine: 'pg_atoi' } 

例如这里我的 /index 和 /about 页面代码代码:

router.get('/index', function(req, res) {

    globaldetails.video(userId, function(err, videoList) {
        users.getUserDetails(userId, function(err, userDetails) {
            globaldetails.expertContent(userId, function(err, expertContent) {
                res.render('users/index', {
                    video : videoList.rows,
                    userDetails : userDetails.rows,
                    expertContent : expertContent.rows,
                });
            });
        });

    });

});

router.get('/about', function(req, res) {
    res.render('users/about');

});

function video(userId, callback) {
    client.query("select * from video where userId='" + userId + "' ", function(err, video) {
        console.log(err);
        callback(err, video);
    });

}

function getUserDetails(userId, callback) {
    var query = "select * from users where userId='" + userId + "' ";
    console.log(query);
    client.query(query, function(err, result) {
        if (err) {
            console.log(err);
        } else {
            callback(err, result);
        }

    });
}

function expertContent(userId, callback) {
    var query = "select * from content where userId='" + userId + "' ";
    client.query(query, function(err, expertContent) {
        if (err) {
            console.log(err);
        } else {
            callback(err, result);
        }
    });

}

任何人都可以为此提供帮助。

预期结果:当我收到错误 /index api 调用时,它不应该影响 /page api 调用。

【问题讨论】:

    标签: node.js postgresql express


    【解决方案1】:

    这里的问题可能是userId是undefined,登录查看。 您的应用中没有错误处理程序,它会使您的应用冻结

    router.get('/index', function(req, res,next) {
      globaldetails.video(userId, function(err, videoList) {
        if(err) next(err); // do same things will other callback or change your code to Promise to easy debug
        else {
        users.getUserDetails(userId, function(err, userDetails) {
            globaldetails.expertContent(userId, function(err, expertContent) {
                res.render('users/index', {
                    video : videoList.rows,
                    userDetails : userDetails.rows,
                    expertContent : expertContent.rows,
                });
            });
        });}
    });
    });
    

    你还需要逻辑处理所有错误

    app.use(function (err, req, res, next) {
        res.render(error page with err info)
    })
    

    【讨论】:

    • 我不明白。请你简单解释一下 router.get('/index', function(req, res,next) { logic handle if err , next(err) });
    • 它的工作,但有任何其他方法,因为我有很多功能,例如。 router.get('/index', function(req, res, next) { test1(userId, function(err, videoList) { test2(userId, function(err, userDetails) { test3(userId, function(err, expertContent) { test4(userId, function(err, expertContent) { test5(userId, function(err, expertContent) { test6(userId, function(err, expertContent) { res.render('users/index', { video : videoList.rows , userDetails : userDetails.rows,expertContent :expertContent.rows, }); }); }); }); }); }); }); });
    猜你喜欢
    • 2013-05-20
    • 2019-09-03
    • 2011-08-30
    • 2017-04-30
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多