2017-04-11 67 views
0

爲什麼這快遞返回值與回調

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需要這個

謝謝

回答

0

根據你的代碼,是你需要發送響應從方法。

由於爲Node.js自然是async所以你需要編寫代碼以這種方式

嘗試在你的路線

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

UPDATE

執行多個方法和單次發送所有記錄,然後通過

async modulepromise

+0

它的作品,但我的想法是調用多個方法,並將結果分配給一個對象,然後res.send該對象。 例如: 'var event = {}; event.details = Event.getEventById(req.params.id,函數(ERR,行){ 如果(ERR){ 返回ERR; }否則{ 返回的行; } }); event.teams = Event.getEventStages(req.params.id,函數(ERR,行){ 如果(ERR){ 返回ERR; }否則{ 返回的行; } }); res。json(event);' –

+0

是的,你可以使用'promise'或異步模塊 – abdulbarik

+0

使用[async.waterfall或series](https://github.com/caolan/async)來獲得你想要的結果 – abdulbarik

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); 
    }); 
}); 
0

我想 「表達,承諾」 這樣的:

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

,仍然得到了相同的結果(即查詢而不是值)。我猜測我的問題是我管理方法的回調方式。這是正確的嗎?