节点js向SQL Server发出请求,返回结果

时间:2019-04-18 15:32:39

标签: sql node.js

使用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”,但是我认为放入回调将达到目的。同样,只需要一些帮助以了解其工作原理并进行设置即可。谢谢!

1 个答案:

答案 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);
  }
});