多个查询 - Route.get()需要回调函数但得到[对象未定义]

时间:2016-12-21 16:17:55

标签: node.js

我正在尝试使用多个sql语句创建简单的仪表板。我在这里经历了很多主题,但仍然无法将sql响应传递给网页。 (Multiple sql queries in nodejs类似,但如果使用更多语句,我想避免使用很长的代码)

尝试不使用select语句作为参数而不是它的作用但如果select语句作为参数而未在函数中定义而不是接收

  

错误:Route.get()需要回调函数,但得到了一个[对象   未定义]

这是一个很好的方法吗?你能支持,有什么不对吗?

这是实际状态:

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;

1 个答案:

答案 0 :(得分:1)

您正在错误地构建路径定义。您正在执行中间件功能,因为您正在传递它们,getDataX()。您需要传入对中间件函数getDataX的引用。然后,Express将传递给包含reqresnext参数的回调函数。

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