来自带回调的方法的快速返回值

时间:2017-04-11 11:52:59

标签: node.js express callback

为什么会这样

router.get('/eventTest/:id', function (req, res) {

var event = Event.getEventById(req.params.id, function (err, rows) {
    if(err) {
        return err;
    } else {
        return rows;
    }
});

res.json(event);

});

返回 { "domain": null, "_events": {}, "_eventsCount": 0, "_callSite": {}, "_ended": false, "_idleNext": null, "_idlePrev": null, "_idleStart": null, "_idleTimeout": -1, "_repeat": null, "sql": "select * from event where id=?", "values": [ "1" ], "typeCast": true, "nestTables": false, "_resultSet": null, "_results": [], "_fields": [], "_index": 0, "_loadError": null }

我和其中一种方法的例子

`getEventById:功能(ID,回调){

    return db.query("select * from event where id=?",[id],callback);
}

`

而不是像在Event.getEventById回调中使用res.json(rows)时那样的实际值?

我需要这个来调用多个方法并将它们添加到一个对象然后在JSON中发送该对象

谢谢

3 个答案:

答案 0 :(得分:1)

根据您的代码,是的,您需要从方法发送响应。

由于Node.js性质为async,因此您需要以这种方式编写代码

在您的路线中尝试

Event.getEventById(req.params.id, function (err, rows) {
    if(err) {
        res.status(500).send(err);
    } else {
      res.status(200).send(rows);
    }
});

<强>更新

  

要执行多个方法并一次发送所有记录,请通过

async modulepromise

答案 1 :(得分:0)

router.get('/eventTest/:id', function (req, res, next) {

  Event.getEventById(req.params.id, function (err, rows) {
    if(err) 
        return next(err);

    res.json(rows);
  });
});

答案 2 :(得分:0)

我试过&#34;表达承诺&#34;像这样:

`router.get('/eventTest/:id', function (req, res) {
    res.json({
       details: Event.getEventById(req.params.id),
       stages: Event.getEventStages(req.params.id)
    });
 });`

并且仍然得到相同的结果(即查询而不是值)。我猜测我的问题是我从方法管理回调的方式。这是对的吗?