我是 Node.js 的新手(总共 3 天的经验)。我正在使用 Node.js 和繁琐的包来查询数据库(azure SQL)。我使用此处解释的示例:https ://docs.microsoft.com/en-us/azure/azure-sql/database/connect-query-nodejs?tabs=macos
const connection = new Connection(config);
// Attempt to connect and execute queries if connection goes through
connection.on("connect", err => {
if (err) {
console.error(err.message);
} else {
console.log("Reading rows from the Table...");
// Read all rows from table
const request = new Request(
"SELECT * FROM clients",
(err, rowCount, columns) => {
if (err) {
console.error(err.message);
} else {
console.log(`${rowCount} row(s) returned`);
}
}
);
request.on("row", columns => {
columns.forEach(column => {
console.log("%s\t%s", column.metadata.colName, column.value);
});
});
connection.execSql(request);
}
});
我有两个问题:
- 我不知道如何将查询到的数据放入对象中
- 如果我运行脚本,它会将项目打印到控制台,但它不会在完成后关闭连接。如果我
connection.close()
在底部添加一个,它将在完成之前关闭连接。我感觉 node.js 同时执行所有东西(我习惯了 Python ..)。
更新
我找到了一种关闭连接的方法,据我了解,请求对象有几个由库预定义的“事件”。看来我需要添加事件“完成”request.on('done', ...)
以确保它甚至可以完成。我更新的代码如下所示:
var connection = new Connection(config);
connection.connect(function(err) {
// If no error, then good to go...
executeStatement();
}
);
connection.on('debug', function(text) {
//remove commenting below to get full debugging.
//console.log(text);
}
);
function executeStatement() {
request = new Request("SELECT * FROM clients", function(err, rowCount) {
if (err) {
console.log(err);
} else {
console.log(rowCount + ' rows');
}
connection.close();
});
request.on('row', function(rows) {
_.forEach(rows, function(value, collection){
console.log(value)
console.log(value.value);
console.log(value.metadata.colName)
console.log(collection)
})
});
request.on('done', function(rowCount, more) {
console.log(rowCount + ' rows returned');
});
// In SQL Server 2000 you may need: connection.execSqlBatch(request);
connection.execSql(request);
}
无论如何,您的帮助将不胜感激!
问候彼得