使用Node.js,在向SQL Server发出请求后如何返回结果时遇到了一些麻烦。当独立运行并写入控制台时,我可以得到很好的结果,但是将其用作函数并使其返回结果是我遇到问题的地方。
我敢肯定,我必须使用回调/承诺,但实际上不了解如何设置它们。希望有人在这里可以帮助我!
这是我的代码:
var sql = require("mssql");
var config = {
user: 'username',
password: 'password',
server: 'localhost',
database: 'Master'
};
function updateTable() {
var connection = new sql.ConnectionPool(config, function(err) {
var request = new sql.Request(connection);
request.query('select LastName from Persons', function(err, result) {
return result.recordset;
});
});
};
console.log(updateTable());
基本上是尝试通过console.log调用函数将结果打印到控制台。现在,它正在打印“ undefined”,但是我认为放入回调将达到目的。同样,只需要一些帮助以了解其工作原理并进行设置即可。谢谢!
答案 0 :(得分:2)
如果只想将其打印到控制台,则可以按照以下方式简单地调整代码:
var sql = require("mssql");
var config = {
user: 'username',
password: 'password',
server: 'localhost',
database: 'Master'
};
function updateTable(callback) {
var connection = new sql.ConnectionPool(config, function(err) {
var request = new sql.Request(connection);
request.query('select LastName from Persons', function(err, result) {
callback(result.recordset);
});
});
};
updateTable(console.log);
假设> = NodeJS v8,要从快速处理程序发送结果:
将实际的数据库接口逻辑包装在异步函数中,该函数不会阻塞主线程并从模块中将其导出。
sqlConnector.js
const sql = require('mssql');
const config = {
user: 'username',
password: 'password',
server: 'localhost',
database: 'Master'
};
const updateTable = async () => {
try {
const pool = await sql.connect(config);
const sqlQuery = 'SELECT LastName FROM Persons';
const result = await pool.request().query(sqlQuery);
return result;
} catch (err) {
throw err;
}
};
export.updateTable = updateTable;
快递员
导入与MS-SQL对话的模块(假定为sqlConnector.js
),并使用async关键字标记处理程序,最后从res.json
返回。
const sqlConnector = require('sqlConnector');
app.get('/someroute', async (req, res, next) => {
try {
const result = await sqlConnector.updateTable();
return res.status(200).json(result);
} catch (error) {
next(error);
}
});