发送后无法设置标头 - 路由

时间:2017-06-06 12:45:48

标签: node.js angular express

我已经看到了问题的多个答案,但我无法解决这个问题,因此我将使用我的代码重新发布它。我是新手,需要帮助来理解和解决这个问题。

我的代码

// Get logs from DB
router.get("/getlogs/:dbtype", function (req, res, next) {
var dbtype = req.params.dbtype;
if (dbtype == "mongodb") {
    list = Logs.find(function (err, log) {
        res.json(log);
    })
} else if (dbtype == "mssql") {
    var config = {
        userName: 'user',
        password: 'pass',
        server: 'server',
        options: {
            instanceName: 'instance',
            database: 'db',
        }
    };

    // SQL Server connection
    var connection = new Tedious.Connection(config);
    connection.on('connect', function (err) {
       // if (err) { console.log(err); res.json(err);}
        // If no error, then good to proceed.  
        //console.log("SQL Server Connected SQL SQL");
        //connection.on('debug', function(err) { console.log('debug:', err);});

        var request = new Tedious.Request(`select top 1 * from table1`, function (err) {
            //if (err)  { console.log(err); res.json(err);}
        });

        request.on('row', function (columns) {
            var row = {};
            columns.forEach(function (column) {
                row[column.metadata.colName] = column.value;
            });
            rows.push(row);
            res.json(rows); **<-- this is where I get error**
        });
        request.on('end', function () {
            res.json(rows);
        })
        connection.execSql(request);
    });
}
});

1 个答案:

答案 0 :(得分:1)

这是因为您每次回到行时都会发送回复。

改变这个:

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

为:

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