2016-12-21 35 views
0

我想用多個sql語句做簡單的儀表板。我在這裏經歷了很多話題,但仍然無法將sql響應傳遞給網頁。 (Multiple sql queries in nodejs是類似的,但我想避免一個很長的代碼,如果使用更多的語句)多個查詢 - Route.get()需要回調函數,但有一個[對象未定義]

當沒有SELECT語句作爲參數比它工作努力,但如果select語句是作爲參數,並在功能上沒有定義,除了接受

Error: Route.get() requires callback functions but got a [object Undefined]

這樣做的好方法嗎?你能否支持,有什麼不對?

這是實際工作狀態:

function selectStmt(stmt) { 
    return function (req, res, cb) { 
     pg.connect(conString, function (err, client, next) { 
      if (err) { 
       console.log(err); 
      } else { 
       client.query(stmt, function (err, result) { 
        if (err) { 
         console.log(err); 
        } else { 
         req.package = JSON.parse(JSON.stringify(result.rows)); 
         console.log(req); 
         cb(req.package); 
         next(); 
        } 
       }); 
      } 
     }); 
    } 
} 

var getDataX = selectStmt('select x from tblX'); 
var getDataY = selectStmt('select y from tblY'); 

router.get('/', getDataX(), getDataY(), function(req, res, next) { 
    res.render('dbtestasync', {dataPackage1: req.package, dataPackage2: req.package}); 
}); 

module.exports = router; 
+0

您是否使用express.js。你能告訴我們你的應用程序配置嗎? –

回答

1

你沒有正確地構建你的路由定義。當您傳遞它們時,您正在執行中間件功能,getDataX()。您需要將參考傳遞給中間件功能getDataX。然後Express將傳遞給包含req,resnext參數的回調函數。

router.get('/', getDataX, getDataY, function (req, res, next) { 
    res.render('dbtestasync', {dataPackage1: req.package, dataPackage2: req.package}); 
}); 
+0

非常感謝你peteb,它的工作:) – daemi

相關問題