我能够连接到MySQL数据库并获取数据,但是当我将数据放入数组时,它在函数外部显示为零

新的Node.js用户尝试使用mysqlx @ xdevapi。我想获取查询的结果集并将其传递给请求。但目前显示0

router.get('/getBuilds', function(req, res) {
            count = 0;
            var BuildStringArray = [];
            mysqlx.getSession({
                user: 'myuser',
                password: 'mypssword',
                host: 'localhost',
                port: '33060'
            }).then(function(s) {
                session = s
                return session.getSchema('test')
            }).then(function() {
                return Promise.all([
                    session.sql('USE test').execute(),
                    session.sql('SELECT BuildS FROM Builds;').execute(function(result) {
                        console.log(count++ + " : " + result); // prints 64 rows of data
                        BuildStringArray.push(result);
                    })
                ])

            })..then(result => {
                res.setHeader('Access-Control-Allow-Origin', '*')
                res.status(200).json(result);
                session.close();
            }).catch(err => {
                console.log("Error: " + JSON.stringify(err, null, 2));
                res.status(500).send({
                    message: "${err}"
                })
                session.close();
            });


我想收集BuildStringArray然后将其传递给响应

最佳答案

您正在将行数据推入此BuildStringArray数组,但要返回Promise.all()解析为的数据(在这种情况下,该数据仅包含有关操作的一些元数据)。

.then(result => {
  res.setHeader('Access-Control-Allow-Origin', '*')
  res.status(200).json(result);
  session.close();
})


我相信将其更改为json(BuildStringArray)可以解决问题。但是,我还要小心express(我假设)控制器内部的异步流。除非您使用支持Promise和/或async/await的最新版本,否则可能需要一些额外的监督。另外,请记住,session.close()也是异步的,因此在这种情况下为它加上前缀return也将使您受益。

免责声明:我是MySQL Node.js X DevAPI连接器的首席开发人员。

10-08 02:03