按照使用Streams2的Piping结果示例,我尝试将结果从MySQL流式传输到node.js中的stdout。代码如下所示:
connection.query('SELECT * FROM table') .stream() .pipe(process.stdout);
我得到这个错误:TypeError: invalid data
TypeError: invalid data
aelbi1ox1#
来自这个项目的github issue:.stream()在"objectMode"中返回流。您无法通过管道将其传输到stdout或网络套接字,因为"data"事件将行作为有效负载,而不是缓冲区块
.stream()
您可以使用csv-stringify模块修复此问题。
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)
.pipe(process.stdout)
.pipe(stringifier)
ztyzrc3y2#
随着Node v10中pipeline的引入,现在有了另一种解决方案(查看文档)。管道方法有几个作用:1.允许您通过管道传输任意多个流。1.完成后提供回调。1.重要的是,它提供了自动清理,这是标准pipe方法的一个优点。
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') } }
2条答案
按热度按时间aelbi1ox1#
解释
来自这个项目的github issue:
.stream()
在"objectMode"中返回流。您无法通过管道将其传输到stdout或网络套接字,因为"data"事件将行作为有效负载,而不是缓冲区块修复
您可以使用
csv-stringify
模块修复此问题。请注意
.pipe(process.stdout)
之前的额外.pipe(stringifier)
ztyzrc3y2#
随着Node v10中
pipeline
的引入,现在有了另一种解决方案(查看文档)。管道方法有几个作用:
1.允许您通过管道传输任意多个流。
1.完成后提供回调。
1.重要的是,它提供了自动清理,这是标准
pipe
方法的一个优点。