首页 文章

管道mssql结果为Express响应

提问于
浏览
0

我在NodeJS中使用mssql来获取大量行 .

我想在Express中将结果传递给HTTP响应,但我看不出如何实现这一点 .

db.js

const sql = require('mssql');

const config = {
  user: 'user',
  password: 'pass',
  server: 'host',
  database: 'db',
};

index.js

我能够将结果传输到命令行:

router.get('/', function (req, res, next) {
  new sql.ConnectionPool(config).connect().then(pool => {
    const request = new sql.Request(pool);
    request.stream = true;
    request.query(`SELECT col1, col2 FROM mytable`);

    request.on('row', row => {
      console.log(row);
    });

  });
});

module.exports = router;

但是,使用request.pipe()会导致错误:

router.get('/', function (req, res, next) {
  new sql.ConnectionPool(config).connect().then(pool => {

    const request = new sql.Request(pool);
    request.pipe(res);
    request.query(`SELECT col1, col2 FROM mytable`);

    request.on('finish', () => {
      res.end();
    });

  });
});

http_outgoing.js:647抛出新的错误.TypeError('ERR_INVALID_ARG_TYPE','第一个参数',^ TypeError [ERR_INVALID_ARG_TYPE]:第一个参数必须是write(_http_outgoing.js:647:11)处的类型字符串或缓冲区之一Request.emit的ServerResponse.write(_http_outgoing.js:622:10)(events.js:180:13)

1 回答

  • 0

    编辑:如果您关心流媒体,为什么不将它存储在对象中

    router.get('/', function (req, res, next) {
      new sql.ConnectionPool(config).connect().then(pool => {
        const request = new sql.Request(pool);
        request.stream = true;
        request.query(`SELECT col1, col2 FROM mytable`);
        var output = [];
        request.on('row', row => {
          console.log(row);
          output.push(row)
        });
    
         request.on('finish', () => {
           res.send(output);
         });
      });
    });
    

相关问题