504网关超时节点+ express + postgresql

时间:2016-01-08 09:14:09

标签: node.js postgresql express

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

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

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

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

有时会在/ index call

中收到错误

错误详情:

{ [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);
        }
    });

}

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

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

1 个答案:

答案 0 :(得分:0)

这里的问题可能是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)
})
相关问题