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

问题描述 投票:0回答:1

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

sql node.js
1个回答
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);
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.