发送回用户时填充数组为空

filled array is empty when send back to user

我尝试使用 SQL 从 azure 数据库中获取数据,为此我使用了 tedious。当我执行代码时,数组“result”填满了数据,但是当 de respond 将数组“result”发送给用户时,它是空的。为什么以及如何解决? (我想以JSON格式发回,长度未知我用5来调试)。

这是我的代码

router.get('/', async (req, res) => {
    result = []
    let rowData = {}
    const request = new Request(
        `SELECT TOP (5) [LogID]
        ,[OpdrachtID]
        ,[ChangeLog]
        ,[TimeStamp]
        ,[PersonID]
    FROM [log].[LOpdracht]`,
    function (err, rowCount, rows) {
        if (err) throw err
    })
    connection.execSql(request)

    request.on('row', function(columns){
        rowData = {}
        columns.forEach(function(column){
            rowData[column.metadata.colName] = column.value
        })
        result.push(rowData)
    })

    res.send(result)
})

看起来您正在使用 Tedious。如果是这样,那么您可以使用 'done' 事件在请求完成并且所有行都已读入 result.

时收到通知
request.on('done', () => res.send(result));

更新:正如文档中的 note 指出的那样,由于您使用的是 execSql,因此您需要收听 doneProcdoneInProc 改为:

request.on('doneProc', () => res.send(result));
request.on('doneInProc', () => res.send(result));

我通过添加这个解决了它:

    request.on('requestCompleted', () => {
        res.send(result)
    })