Функция Azure httptrigger не возвращает ответ на запрос SQL Server

Я пытаюсь создать функцию Azure, которая подключается к SQL Server. Ответ не выполняется. Я вижу правильные данные, возвращаемые в журнале. Любые идеи о том, как я могу вернуть context.res после завершения запроса?

var rows = [];

module.exports = function (context, req, res) {
context.log('JavaScript HTTP trigger function processed a request.');

if(req.query.nfcID) {
     connection.on('connect', function(err) {
         request = new Request("select tagUID, ProductID, Active From Tags where TagUID = "+ req.query.nfcID,
    function(err, rowCount, rows) {
    if (err) {
       context.log(err);
    } else {

        connection.close();
        context.log('rows: '+rowCount);

    }
});

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

    context.log(rows);

    context.res = {
            body: rows;
        }
});

connection.execSql(request);
});

}
else {
    context.res = {
        status: 400,
        body: "Please provide the nfc id"
    };
}
context.done();
};

person Chuang Z    schedule 24.08.2017    source источник


Ответы (2)


Пожалуйста, измените код на:

var rows = [];

module.exports = function(context, req, res) {
    context.log('JavaScript HTTP trigger function processed a request.');

    if (req.query.nfcID) {
        connection.on('connect', function(err) {
            request = new Request("select tagUID, ProductID, Active From Tags where TagUID = " + req.query.nfcID, function(err, rowCount, rows) {
                if (err) {
                    context.log(err);
                } else {

                    connection.close();
                    context.log('rows: ' + rowCount);

                }
            });

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

                context.log(rows);

                context.res = {
                    body: JSON.stringify(rows);
                }

                context.done();
            });

            connection.execSql(request);
        });

    } else {
        context.res = {
            status: 400,
            body: "Please provide the nfc id"
        };

        context.done();
    }


};
person Aaron Chen    schedule 24.08.2017
comment
Потрясающий! Спасибо - person Chuang Z; 28.08.2017

Вы пропустили вызов context.done() после установки значения context.res. Без context.done() вызов функции просто истечет по тайм-ауту.

person Mikhail Shilkov    schedule 24.08.2017