我能够连接到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连接器的首席开发人员。