如何从函数返回数据?

时间:2016-12-17 01:25:55

标签: node.js express pg-promise

我编写了一个小型数据库函数,它从数据库中获取一些数据并将其放入我想要的格式中,但是我很难将数据返回到使用Express显示它。数据库功能如下:

function getAllEvents(req, res, next) {
  db.any('select * from sensors, events where sensors.sensorid = events.sensorid')
    .then(function (data) {
        var final = [];

        data.forEach(function(datas){
            if (!final[datas.sensorid]){
                final[datas.sensorid] = {};
            }
            if (!final[datas.sensorid].name){
                final[datas.sensorid].name = datas.name;
                final[datas.sensorid].signatures = {};
            }
            if (!final[datas.sensorid].signatures[datas.signature]){
                final[datas.sensorid].signatures[datas.signature] = {};
                final[datas.sensorid].signatures[datas.signature].id = "sen" + datas.sensorid + "sig" + datas.signature;
                final[datas.sensorid].signatures[datas.signature].signature = datas.signature;
                final[datas.sensorid].signatures[datas.signature].message = datas.message;
                final[datas.sensorid].signatures[datas.signature].events = {};
            }

            final[datas.sensorid].signatures[datas.signature].events[datas.eventid] = datas;
        })

        return final;

    })
    .catch(function (err) {
      console.log("Something went wrong! ", err)
    });
}

调用它的路由器功能是:

router.get('/events', function(req, res, next) {
    db.getAllEvents(function(err, data){
        res.render('events', { data: data });
    });
});

我认为路由器功能无限期地等待数据,因为我没有错误,但页面永远不会加载。我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

我做错了什么?

此代码:

router.get('/events', function(req, res, next) {
    db.getAllEvents(function(err, data){
        res.render('events', { data: data });
    });
});
除了你没有检查错误之外,

还可以。请注意,getAllEvents期望函数作为参数。

现在让我们看一下你的getAllEvents函数原型

function getAllEvents(req, res, next) {

这是不正确的,应该是

function getAllEvents(callback) {

然后你就可以打电话给回叫了"返回"像这样的结果

return callback(null,data);

或者在数据库连接期间发生错误时将错误传递给回调

return callback(err);