【发布时间】:2015-05-14 19:52:21
【问题描述】:
按照Piping results with Streams2 上的示例,我正在尝试将结果从 MySQL 流式传输到 node.js 中的标准输出。
代码如下:
connection.query('SELECT * FROM table')
.stream()
.pipe(process.stdout);
我收到此错误:TypeError: invalid data
【问题讨论】:
按照Piping results with Streams2 上的示例,我正在尝试将结果从 MySQL 流式传输到 node.js 中的标准输出。
代码如下:
connection.query('SELECT * FROM table')
.stream()
.pipe(process.stdout);
我收到此错误:TypeError: invalid data
【问题讨论】:
现在有了另一个解决方案,在 Node v10 中引入了pipeline。
管道方法做了几件事:
pipe 方法更有优势。const fs = require('fs')
const mysql = require('mysql')
const {pipeline} = require('stream')
const stringify = require('csv-stringify')
const stringifier = stringify()
const output = fs.createWriteStream('query.csv')
const connection = mysql.createConnection(...)
const input = connection.query('SELECT * FROM table').stream()
pipeline(input, stringifier, process.stdout, err => {
if (err) {
console.log(err)
} else {
console.log('Output complete')
}
}
【讨论】:
来自这个 github issue 的项目:
.stream()在“objectMode”中返回流。您不能将其通过管道传输到标准输出或网络 套接字,因为“数据”事件将行作为有效负载,而不是缓冲区块
您可以使用csv-stringify 模块解决此问题。
var stringify = require('csv-stringify');
var stringifier = stringify();
connection.query('SELECT * FROM table')
.stream()
.pipe(stringifier).pipe(process.stdout);
注意.pipe(process.stdout)之前的额外.pipe(stringifier)
【讨论】: