node mssql stream return issue

时间:2018-04-06 19:51:51

标签: sql-server procedure execute hapijs

我正在尝试从使用node和mssql返回多个数据集的过程中流式传输数据。如果使用长函数它可以工作,但我需要它从我正在使用的路径返回数据集。

handler: function(request, reply) {
 var inputValues = request.payload.inputParams;
        var procName    = request.params.procedureName;

        var request     = new sql.Request(mainsettings.connection);
        request.stream  = true;

        var newGroup        = [];
        var count           = 0;
        var recordSetArr    = [];

        for(var key in inputValues) {
            var currentParam = inputValues[key];
            var paramType    = getParamType(sql, currentParam.paramType);
            try {
                request.input(currentParam.paramName, paramType, currentParam.paramValue);
            } 
            catch(err) {
                console.error(err);
            }
        }           

        request.execute(procName);

        request.on('recordset', function(columns) {
            // Emitted once for each recordset in a query
            count++;

            if(count > 1) {
                recordSetArr.push(newGroup);
            }

            newGroup = []; 
        });

        request.on('row', function(row) {
            // Emitted for each row in a recordset 
            newGroup.push(row);
        });

        request.on('error', function(err) {
            // May be emitted multiple times 
            console.error(err);
        });

        request.on('done', function(returnValue) {
            // Always emitted as the last one
            return (recordSetArr);
        });
}

我收到以下错误。

 Debug: internal, implementation, error
    Error: handler method did not return a value, a promise, or throw an error
    at module.exports.internals.Manager.execute (F:\FARA_API\node_modules\hapi\l
ib\toolkit.js:52:29)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
180406/194833.505, (1523044113505:MISOM-DEV-002:6976:jfod4ysa:10140) [error] mes
sage: handler method did not return a value, a promise, or throw an error, stack
: Error: handler method did not return a value, a promise, or throw an error
    at module.exports.internals.Manager.execute (F:\FARA_API\node_modules\hapi\l
ib\toolkit.js:52:29)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)

关于我应该如何正确返回数据集的任何建议?

还尝试了以下

handler: function(request, reply) {
        recordRouteCall("procedure");

        var inputValues = request.payload.inputParams;
        var procName    = request.params.procedureName;

        sql.connect(mainsettings.connection, err => {
            var request     = new sql.Request();
            request.stream  = true;

            var newGroup    = [];
            var count       = 0;            

            var recordSetArr = [];

            for(var key in inputValues) {
                var currentParam = inputValues[key];
                var paramType    = getParamType(sql, currentParam.paramType);
                try {
                    request.input(currentParam.paramName, paramType, currentParam.paramValue);
                } 
                catch(err) {
                    console.error(err);
                }
            }

            request.execute(procName);  

            request.on('recordset', columns => {
                // Emitted once for each recordset in a query 
                count++;

                if(count > 1) {
                    recordSetArr.push(newGroup);
                }

                newGroup = [];
            });

            request.on('row', row => {
                // Emitted for each row in a recordset 
                newGroup.push(row);
            });

            request.on('error', err => {
                // May be emitted multiple times 
                console.error(err);
            });

            request.on('done', result => {
                // Always emitted as the last one
                console.log(recordSetArr);
                return (recordSetArr);
            });
        });
        sql.on('error', err => {
            console.error(err);
            return err;
        });
    }

0 个答案:

没有答案