使用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调用该函数将结果打印到控制台。现在它打印'未定义',但我认为放入回调就可以了。再次,只需要一些帮助,了解它是如何工作的,并设置它。谢谢!
如果您只想将其打印到控制台,则可以按如下方式调整代码:
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);
}
});